lua学习之表达式
- 算数运算符
一元运算符:-(负值)
二元运算符:+ - * / ^ (加减乘除幂) - 关系运算符
< > <= >= == ~=(相当于!=)
这些操作符返回结果为false或者true; ==和~=比较两个值,如果两个值得类型不同,lua也认为两者不同;
lua通过引用比较tables、userdata、functions,当且仅当两者表示同一个对象时相等a = {}; a.x = 1; a.y = 0 b = {}; b.x = 1; b.y = 0 c = a a==c but a~=b
lua比较字符按字母的顺序进行,但是字母顺序依赖本地环境。混合比较数字和字符串会报错(如:2 < "1")
- 逻辑运算符
and or not
逻辑运算符认为false和nil是假,其他为真,0也是真
>and 和 or的运算结果不是true和false,而是和它两个操作数相关a and b -- 如果 a 为 false,则返回 a,否则返回 b a or b -- 如果 a 为 true,则返回 a,否则返回 b
and和or都使用“短路求值”,也就是说,它们只会在需要时才去评估第二个操作数
print(4 and 5) --> 5 print(nil and 13) --> nil print(false and 13) --> false print(4 or 5) --> 4 print(false or 5) --> 5
-- 如果 x 为 false 或者 nil 则给 x 赋初始值 v(创建类时常用) x = x or v -- 等价于 if not x then x = v end
>and的优先级比or高
a ? b : c 等价于 (a and b) or c
>not的结果只返回false或者true
print(not nil) --> true print(not false) --> true print(not 0) --> false print(not not nil) --> false
- 连接运算符
.. -- 两个点
>字符串连接,如果操作数为数字,Lua 将数字转成字符串
print("Hello " .. "World") --> Hello World print(0 .. 1) --> 01
- 优先级
-- 高到低 ^ not - (unary) * / + - .. < > <= >= ~= == and or