表达式用于表示值。Lua的表达式中可以包含数字常量、字面字符串、变量、一元和二元操作符及函数调用。另外有别于传统的是,表达式中还可以包括函数定义和table构造式。
Lua支持常规的算术操作符有:二元的+、-、*、/、^、%,及一元 - (负号)。取模操作符计算结果的符号永远与第二个参数相同。
Lua提供的关系操作符有:>、<、>=、<=、==、~=。所有这些操作符的运算结果都是true或false。
逻辑操作符有and、or 和not 。与条件控制语句一样,所有的逻辑操作符将false 和nil 视为假,其他视为真。对于操作符and 来说,如果它的第一个操作数为假,就返回第一个操作数,不然返回第二个操作数。对于操作符or 来说,如果它的第一个操作数为真,就返回第一个操作数,不然返回第二个操作数。
print(4 and 5) -->5 print(nil and 3) -->nil print(false and 3) -->false print(4 or 5) -->4 print(false or 5) -->5
print(not nil) -->true print(not false) -->true print(not 0) -->false print(not not nil) -->false
要在Lua中连接两个字符串,可以使用操作符“.."(两个点)。如果其任意一个操作数是数字的话,Lua会将这个数字转换成一个字符串:
print("Hello ".."World") -->Hello World print(0 ..1) -->01
请记住,Lua中的字符串是不可变的值。连接操作符只会创建一个新的字符串,而不会对其原操作数进行任何修改。
Lua操作符的优先级如下所示(从高到低):
^ not # -(一元负号) * / % + -(二元减号) .. < > <= >= ~= == and or
在二元操作符中,除了指数操作符”^“和连接操作符”..“是”右结合“的,所有其他操作符都是”左结合“的。
构造式是用于创建和初始化table的表达式。
days = {"M", "T", "W", "T", "F", "S"} print(days[1]) -->M
a = {x=1, y=2} --等价于 a={}; a.x=1; a.y=2
polyline = {color="blue", t=4, {x=0, y=1}} print(polyline[3].x) -->0
在构造式中还可以用分号代替逗号。通常会将分号用于分隔构造式中不同的成分:
{x=0, y=1; "one", "two"}