开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
多变量赋值
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
]]