多变量赋值
a,c,d="1",13,true print(a)--1 print(c)--13 print(d)--true --多变量赋值时,如果值的个数不够变量的个数,变量为空 a,c,d="1",13 print(a)--1 print(c)--13 print(d)--nil --多变量赋值时,如果值的个数多了,值会自动舍弃,只会有几个变量赋几个值 a,c,d="1",13,14,17 print(a)--1 print(c)--13 print(d)--14
and和or
我们知道and是取与,与就是0 and 0 = 0、0 and 1 = 0、1 and 1 = 1,也就是说有一个为0值就为0,全为1表达式值才为1,所以,当and的第一个操作数为0的时候,我们就没有必要看后面的操作数了,此时表达式的值已经为0,我们就把第一个为0的操作数返回即可;如果第一个操作数为1,那么整个表达式的值就取决于第二个操作数了,第二个为0表达式值为0,第二个为1表达式值为1,所以因为第二个操作数是啥表达式值就是啥,那么我们就把第二个操作数返回就行了。
or是取或,或就是0 or 0 = 0、0 or 1 = 1、1 or 1 = 1,也就是说有一个为1值就为1,全为0表达式值才为0,所以,当or的第一个操作数为1的时候,我们就没有必要看后面的操作数了,此时表达式的值已经为1,我们就把第一个为1的操作数返回即可;如果第一个操作数为0,那么整个表达式的值就取决于第二个操作数了,第二个为0表达式值为0,第二个为1表达式值为1,所以因为第二个操作数是啥表达式值就是啥,那么我们就把第二个操作数返回就行了。
print(1 and 3)--3 print(1 and nil)--nil,有假则假 print(1 or 3)--1,有真则真 print(1 or nil)--1 print(nil or false)--false
三目运算
Lua 原生的语义并没有实现三目运算,一般是通过逻辑运算符 and 和 or 来模拟三目运算符的。Lua 中 and 和 or 都使用"短路求值(short_cur evaluation)",也就是说,它们只会在需要时才去评估第二个操作数。
local a, b, ret; ret = a > b and a or b
穷举所有可能性:
a > b 时:
a > b and a –> true a or b –> a
a <= b时:
a > b and a –> false a or b –> b
三目运算符
x=3 y=4 --返回最大的那个值 local result=(x>y) and x or y print(result)--4 -- 解析 --[[ (x>y) and x--->(x>y) (x>y) or y----->y result=4 ]]