表达式用于表示值。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 ~= 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

     二元操作中,除了指数操作符和链接操作符是“右结合”,所有其他操作符都是“左结合”