UH2S1L9——特殊用法
本章代码关键字
多变量赋值
一行代码可以为多个变量赋值,如果后面的值不够,则后面的变量自动补空,如果后面的值过多,则多余的值被忽略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| print("**********多变量赋值************") local a, b, c = 1, 2, "123" print(a) print(b) print(c)
local a, b, c = 1, 2 print(a) print(b) print(c)
local a, b, c = 1, 2, 3, 4, 5, 6 print(a) print(b) print(c)
|
1 2 3 4 5 6 7 8 9 10
| **********多变量赋值************ 1 2 123 1 2 nil 1 2 3
|
多返回值
函数可以返回多个值,用几个变量接收就有几个值,如果少了,就少接几个,如果多了就自动补空
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| print("**********多返回值************") function Test() return 10, 20, 30, 40 end
a, b, c = Test() print(a) print(b) print(c)
a, b, c, d, e = Test() print(a) print(b) print(c) print(d) print(e)
|
1 2 3 4 5 6 7 8 9
| **********多返回值************ 10 20 30 10 20 30 40 nil
|
and or
在Lua中,逻辑运算符and
和or
不仅可以连接boolean
值,任何值都可以用来连接
在Lua中,只有nil
和false
才认为是假(0也不算假)
Lua的逻辑运算符也有短路特性,因此and
遇到false
或者nil
,就返回false
或者nil
如果and
连接起来的值没有false
或者nil
,它就会返回and
连接的最后一个值
1 2 3 4 5 6 7
| print( 1 and 2 ) print( 0 and 1 ) print( nil and 1 ) print( false and 1 ) print( true and 3 ) print( true and 3 and 2 ) print( true and "a" and nil and 2 )
|
Lua的逻辑运算符也有短路特性,因此or
遇到非false
或者nil
的值,就直接返回那个值
如果or
连接起来的值全部是false
或者nil
,它就会返回or
连接的最后一个值(false
或者nil
)
1 2 3 4 5
| print( true or 1 ) print( false or 1 ) print( nil or 2 ) print( 2 or "1" or false or nil ) print( false or nil or false or nil )
|
所以,虽然Lua不支持三目运算符,但是Lua可以用and
和or
来模拟一个三目运算符,
即(条件表达式) and 为真时返回值 or 为假时返回值
,对应条件表达式 ? 为真时返回值 : 为假时返回值
思路是这样的:
- 当前面的条件表达式为非
false
或者nil
时,由于无假返回真,(条件表达式) and 为真时返回值
返回为真时返回值
,
此时就有为真时返回值 or 为假时返回值
,由于有真返回真,因此先返回前面的为真时返回值
- 当前面的条件表达式为
false
或者nil
时,由于有假返回假,(条件表达式) and 为真时返回值
返回false
或者nil
,
此时就有false/nil or 为假时返回值
,由于有真返回真,因此返回后面的为假时返回值
(即使后面也是false
或者nil
,也是返回后面的那个)
1 2 3 4 5 6 7 8 9
| local x = 3 local y = 2 local result = (x > y) and x or y print(result)
local x = 1 local y = 2 local result = (x > y) and x or y print(result)
|