Lua中的布尔值
Lua中的真值和假值
除了nil和false为假, 其它都为真.
这意味着包括0, 空字符串, 空表都为真.
源码中关于布尔值的代码
#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0))
说明:
ttisnil(o)
: 判断对象o是否为nil值ttisboolean(o)
: 判断对象的tag是否为LUA_TBOOLEAN
bvalue(o)
: 判断对象的联合体value_
中的变量b
是否为0
布尔值的应用
传参时的「nil」和「false」的�
Lua中经常给参数设置默认值的代码是 input = input or value
, 当input为空时, 我们赋予它默认值value. 但是这个并不适用于布尔值.
如果我们的参数类型为false时, 执行input = input or value
之后它被改成默认值, 所以input被改成了true!
逻辑运算符
Lua中的逻辑运算符是 and, or, not, 其中逻辑运算规则下
A and B -- 如果A为false,则返回A,否则返回B
A or B -- 如果A为true,则返回A,否则返回B
三元运算符
Lua中并没有三元运算符, 但是利用运算 ret = A and B or C
可以实现其效果.
但是需要注意的是, 如果B为false, 则ret永远为C, 达不到”当A为真时, ret为B; 否则为C”的效果, 因为A and false
永远为false, false or C
永远为C
式子ret = A and true or false
可以用在判断A是否存在(即为nil)