Lua的表达式中可以包含数字常量、字面字符串、变量、一元和二元操作符级函数调用。有别于传统的是,表达式中还可以包括函数定义和table构造式。
1.算术操作符有:二元"+"、"-"、"*"、"/"、"^(指数)"、"%",一元"-(负号)"。
例如:
x^0.5表示计算x的平方根
x^(-1/3)表示计算x的立方根的倒数
取模操作符是根据以下规则定义的:
a%b == a - floor(a/b)*b
2.关系运算符:< > <= >= == ~=
操作符:==和~= 可应用于任意两个值,如果两个值具有不同类型,Lua就认为它们是不相等。否则Lua会根据它的类型来比较两者。需要注意,nil只与其自身相等。
对于table、userdata和函数,Lua是作为引用比较的。也就是说,只有当它们引用同一个对象时,才认为它们相等。
例如:
a = {};a.x = 1; a.y = 0
b = () ;b.x = 1; b.y= 0
c = a
结果是 a==c,a~=b
只能对两个数字和两个字符串作大小性比较。Lua是按照字母次序比较字符串的,具体的字母次序取决于对Lua的区域设置。
数字和字符串之外的其他类型只能进行相等行和不等性比较。
为了避免类型不一致的比较,Lua会在遇到字符串和数字的大小比较时引发一个错误
例如:
2<"15"。
3.逻辑操作符 and or 和 not,所有逻辑操作符将false 和nil视为假,其他任何东西视为真。
and: 如果第一个操作数为假返回第一个操作数,否则返回第二个操作数
or: 如果第一个操作数为真返回第一个操作数,否则返回第二个操作数
and 和 or 都是使用"短路求值"也就是说,他们只会在需要时才去评估第二个操作数。
操作符not永远只返回true和false
4.字符串连接: ".." Lua中字符是不可变的值,连接操作符会创建一个新的值,但是不会对原值进行任何修改
5.优先级:(^) > (not、# - (一元) ) > ( *、 /、 % ) > ( +、 - ) > (..) > ( < 、> 、<= 、>= 、-= 、==) > ( and ) > (or)
在二元操作符中,指数操作符"^" 和连接操作符".."是'右结合"的,其他都是"左结合"。
例如:
x^y^z <--> x^(y^z)
6.构造式是用于创建和初始话table的表达式。
最简单的构造式就是一个空构造式{},创建了一个空的table
Lua中数组默认起始位置为1。