表达式用于表示值。Lua的表达式中能够包含数字常量、字面字符串、变量、一元和二元操做符及函数调用。区别于以往的,Lua的表达式中能够包括函数定义和table构造式。函数
算术操做符lua
Lua支持常规的算术操做符有:二元的加(“+”)、减(“-”)、乘(“*”)、除(“/”)、指数(“^”)、取模(“%”);一元的负号(-),全部的这些操做均可用于实数。spa
其中取模操做符根据如下规则定义:a % b == a - floor(a / b) * b。code
对于整数来讲,以上算式的计算结果的符号永远与第二个参数相同。对象
对于实数来讲,x % 1 = x 的小数部分;x - x %1 = x 的整数部分;相似地,x - x%0.01精确到小数点后两位的结果。字符串
x = math.pi print(x - x%0.01) ------->3.14
关系操做符table
Lua提供了: < > <= >= == ~= 这些关系操做符。全部这些操做符的运算结果都是true或false。若是两个值具备不一样的类型,Lua就认为他们是不相等的。不然,Lua会根据他们的类型来比较二者。这里nil只与其自身相等。class
对于Table、userdata和函数,只有当他们引用同一个对象时,才认为他们相等。变量
a = {} a.x = 1 a.y = 0 b = {} b.x = 1 b.y = 0 c = a 结果:a == c, a ~= b
Lua中只能对两个数字或两个字符串做大小性的比较。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 |
二元操做中,除了指数操做符和连接操做符是“右结合”,全部其余操做符都是“左结合”