文章目录
一、Lua运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 其他运算符
1. 算术运算符
A , B = 10 , 20 A, B = 10, 20 A,B=10,20
- 幂:^
在 lua 中,/ 用作除法运算,计算结果包含小数部分,// 用作整除运算,计算结果不包含小数部分:
a = 5
b = 2
print("除法运算 - a/b 的值为 ", a / b )
print("整除运算 - a//b 的值为 ", a // b )
除法运算 - a/b 的值为 2.5
整除运算 - a//b 的值为 2
2. 关系运算符
A , B = 10 , 20 A, B = 10, 20 A,B=10,20
- 不等于: ~=
3. 逻辑运算符
A , B = t r u e , f a l s e A, B = true, false A,B=true,false
4. 其他运算符
注意: # 对 table 获取长度时,根据的是表的最大索引值。(也不确定是)
(当所获取的table中存在nil时,#返回的数值是无意义的。)
local tab = {}
tab[1] = 1
tab[2] = 2
tab[3] = nil
print(#tab)
--结果为2
- 有的结果是0,我本地跑出3。所以不在讨论存在nil的table取长度情况。
local tab2 = {}
tab2[1] = nil
tab2[2] = 2
tab2[3] = 3
print(#tab2)
--结果为3
对于不存在nil的table,取值也非常玄乎!!!
所以我们采用下面的封装方法,获取table的元素个数: (不含nil)
function table.length(t)
local i = 0
for k, v in pairs(t) do
i = i + 1
end
return i
end
5. 运算符优先级
从高到低的顺序:
^
not - (unary)
* / %
+ -
..
< > <= >= ~= ==
and
or
除了 ^ 和 .. 外所有的二元运算符都是左连接的。
-x^2 --<--> -(x^2)
x^y^z --<--> x^(y^z)
二、三目运算符:(a and {b} or {c})[1]
Lua 中没实现三目运算的操作。
C语言中:a ? b : c, a 为 true 返回 b 否则返回 c。
这里用Lua代码等价实现三目运算:
(a and {b} or {c})[1]
三、不同于C的:and 和 or
两个 number 类型的数值:
- 进行 and 操作,返回在 and 右边那个数值。
- 进行 or 操作,返回在or 左边那个数值。
a, b, c = 1, 2, 3
print(a and b) --> 2
print(a or b) --> 1
print(a and b or c) --> 2
print(a or b and c) --> 1