表达式用于表示值。Lua的表达式中可以包含数字常量、字面字符串、变量、一元和二元操作符及函数调用。区别于以往的,Lua的表达式中可以包括函数定义和table构造式。
算术操作符
Lua支持常规的算术操作符有:二元的加(“+”)、减(“-”)、乘(“*”)、除(“/”)、指数(“^”)、取模(“%”);一元的负号(-),所有的这些操作都可用于实数。
其中取模操作符根据以下规则定义:a % b == a - floor(a / b) * b。
对于整数来说,以上算式的计算结果的符号永远与第二个参数相同。
对于实数来说,x % 1 = x 的小数部分;x - x %1 = x 的整数部分;类似地,x - x%0.01精确到小数点后两位的结果。
x = math.pi
print(x - x%0.01) ------->3.14关系操作符
Lua提供了: < > <= >= == ~= 这些关系操作符。所有这些操作符的运算结果都是true或false。如果两个值具有不同的类型,Lua就认为他们是不相等的。否则,Lua会根据他们的类型来比较两者。这里nil只与其自身相等。
对于Table、userdata和函数,只有当他们引用同一个对象时,才认为他们相等。
a = {}
a.x = 1
a.y = 0
b = {}
b.x = 1
b.y = 0
c = a
结果:a == c, a ~= bLua中只能对两个数字或两个字符串作大小性的比较。Lua按照字母次序比较字符串,具体的字母次序取决于对Lua的区域设置。数字和字符串之外的其他类型只能进行相等或者不等性的比较。
逻辑操作符
逻辑操作符有and,or 和 not。与条件控制语句一样,所有的逻辑操作符将false和nil视为假,而将其他的任何东西视为真。
对于and来说,如果它的第一个操作数为假,就返回第一个操作数;不然返回第二个操作数。
and是哪个为假就返回哪一个,如果两个都为假就返回第一个假的。如果两个都为真就返回最后一个真的。对于or来说,如果它的第一个操作数为真,就返回第一个操作符;不然返回第二个操作数。
or是哪个为真就返回哪一个,如果两个都为真就返回第一个真的,如果两个都为假就返回最后一个假的。and 和 or 都使用”短路求值“,只会在需要时才去评估第二个操作数。可以确保("type(v) == "table" and v.tag == "h1"")
常用的Lua习惯写法
"x = x or v"
等于
if not x then x = v end字符串连接
Lua中连接两个字符串,可以使用操作符“..”,如果其任意一个操作数是数字的话,Lua会将这个数字转换成一个字符串。
Lua中的字符串是不可变的值。连接操作符只会创建一个新的字符串,而不会对其原操作数进行任何修改。
a = "hello"
print(a .. "world") --- >helloWorld
print(a) ----> hello优先级
Lua 操作符的优先级:
^ |
not # -(一元) |
* / % |
+ - |
.. |
< > <= >= ~= == |
and |
or |
二元操作中,除了指数操作符和链接操作符是“右结合”,所有其他操作符都是“左结合”
















