12.特殊语法
12.1 知识点
多变量赋值
- 多变量赋值语法:变量1,变量2,…变量n = 值1,值2,…值n
- 示例:
a, b, c = 1, 2, 3 print(a) --1 print(b) --2 print(c) --3
- 如果值不够匹配变量,未匹配到值的变量会是nil
- 示例:
a, b, c = 1, 2 print(a) --1 print(b) --2 print(c) --nil
- 如果值比变量多,多出来的值没有被使用
- 示例:
a, b, c = 1, 2, 3, 4, 5, 6 print(a) --1 print(b) --2 print(c) --3
多返回值
- 多返回值语法:return 值1,值2,…值n,一般用于函数中
- 示例:
function Test() return 1, 2, 3, 4 end
- 如果返回的值比用来接的变量多,多出来的值没有被使用
- 示例:
a, b, c = Test() print(a) --1 print(b) --2 print(c) --3
- 如果返回的值不够匹配用来接的变量,未匹配到值的变量会是nil
- 示例:
a, b, c, d, e = Test() print(a) --1 print(b) --2 print(c) --3 print(d) --4 print(e) --nil
and和or的特性
- 在lua中,逻辑与and和逻辑或or不仅可以连接boolean,任何变量都可以用来连接。只有nil和false才认为是假,其他都认为是真。
- 逻辑与and运算符在左操作数为真时返回右操作数,否则返回左操作数。口诀:都真则真,有假则假。
- 逻辑或or运算符在左操作数为真时返回左操作数,否则返回右操作数。口诀:都假则假,有真则真。
- 这是因为lua的逻辑运算符是短路运算的。
- 比如and第一个数都是否了,就不用看第二个数脸色了。直接返回第一个数。否则就返回第二个数。
- 比如or第一个数都是真了,就不用看第二个数脸色了。直接返回第一个数。否则就返回第二个数。
- 示例:
print(1 and 2) -- 2,都真则真,因为1为真,所以返回2。 print(0 and 1) -- 1,都真则真,因为0为真,所以返回1。 print(nil and 1) -- nil,有假则假,因为nil为假,所以返回nil。 print(false and 2) -- false,有假则假,因为false为假,所以返回false。 print(true and 3) -- 3,都真则真,因为true为真,所以返回3。 print(true or 1) -- true,有真则真,因为true为真,所以返回true。 print(false or 1) -- 1,都假则假,因为false为假,所以返回1。 print(nil or 2) -- 2,都假则假,因为nil为假,所以返回2。
- lua不支持三目运算符,但可以使用and和or模拟三目运算符。
- lua中的三元运算模拟:result = (条件表达式) and 条件为真时返回值 or 条件为假时返回值。
- 示例:
x = 3 y = 2 local result = (x > y) and x or y -- 对应C#的三目运算符 x>y?x:y; print(result) -- 输出:3
- 如果(x>y)为真,那么 (x>y) and x 会返回x,然后x再和y或一下,因为x一般不是nil或false,所以会返回x。
- 如果(x>y)为假,那么 (x>y) and x 会返回(x>y),然后(x>y)再和y或一下,因为(x>y)为假已经是假了,所以肯定会返回y。
12.2 知识点代码
print("**********特殊用法************")
print("**********知识点一 多变量赋值************")
--多变量赋值语法:变量1,变量2,...变量n = 值1,值2,...值n
a, b, c = 1, 2, 3
print(a) --1
print(b) --2
print(c) --3
--如果值不够匹配变量 未匹配到值的变量会是nil
a, b, c = 1, 2
print(a) --1
print(b) --2
print(c) --nil
--如果值比变量多 多出来的值没有被使用
a, b, c = 1, 2, 3, 4, 5, 6
print(a) --1
print(b) --2
print(c) --3
print("**********知识点二 多返回值************")
-- 多返回值语法:return 值1,值2,...值n 一般用于函数中
function Test()
return 1, 2, 3, 4
end
--如果返回的值比用来接的变量多 多出来的值没有被使用
a, b, c = Test()
print(a) --1
print(b) --2
print(c) --3
--如果返回的值不够匹配用来接的变量 未匹配到值的变量会是nil
a, b, c, d, e = Test()
print(a) --1
print(b) --2
print(c) --3
print(d) --4
print(e) --nil
print("**********知识点三 and和or的特性************")
--在lua中逻辑与and和逻辑或or不仅可以连接 boolean 任何变量都可以用来连接
--只有 nil 和 false 才认为是假 其他都认为是真
--逻辑与and运算符在左操作数为真时返回右操作数,否则返回左操作数。口诀:都真则真 有假则假
--逻辑或or运算符在左操作数为真时返回左操作数,否则返回右操作数。口诀:都假则假 有真则真
-- 这是因为lua的逻辑运算符是短路运算的。
-- 短路:第一个运算条件满足就会停止计算了
print(1 and 2) -- 2,都真则真,因为1为真,所以返回2。
print(0 and 1) -- 1,都真则真,因为0为真,所以返回1。
print(nil and 1) -- nil,有假则假,因为nil为假,所以返回nil。
print(false and 2) -- false,有假则假,因为false为假,所以返回false。
print(true and 3) -- 3,都真则真,因为true为真,所以返回3。
print(true or 1) -- true,有真则真,因为true为真,所以返回true。
print(false or 1) -- 1,都假则假,因为false为假,所以返回1。
print(nil or 2) -- 2,都假则假,因为nil为假,所以返回2。
-- lua不支持三目运算符,但可以使用and和or模拟三目运算符。
-- lua中的三元运算模拟:result = (条件表达式) and 条件为真时返回值 or 条件为假时返回值
-- C#中的三目运算符语法:result = (条件表达式) ? 条件为真时返回值 : 条件为假时返回值;
x = 3
y = 2
local result = (x > y) and x or y -- 对应C#的三目运算符 x>y?x:y;
print(result) -- 输出:3
-- 如果(x>y)为真,那么 (x>y) and x 会返回x,然后x再和y或一下,因为x一般不是nil或false,所以会返回x
-- (x>y) and x ——> x
-- x or y ——> x
x = 1
y = 2
local result = (x > y) and x or y -- 对应C#的三目运算符 x>y?x:y;
print(result) -- 输出:2
-- 如果(x>y)为假,那么 (x>y) and x 会返回(x>y),然后(x>y)再和y或一下,因为(x>y)为假已经是假了,所以肯定会返回y
-- (x>y) and x ——> (x>y)
-- (x>y) or y ——> y
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com