Lua基础 表达式


表达式表示值。在Lua中,表达式包括:数值常量、字符串字面值、变量、单目和双目运算符,函数调用,也包括一些非传统的函数定义和表结构。

1.算术运算符

Lua支持常规的算术运算符:'+', '-', '*', '/', '^', '%', '-'(负)。所有这些运算符都对实数起作用。举个例子,x^0.5, 计算x的平方根, x^(-1/3),计算x的立方根的反数。

在Lua中,'%'运算符定义规则如下:

a%b == a - floor(a/b)*b

对整型参数来说,它表示常规的意义,结果跟第二个参数b符号相同。

对实数来说,它有一些额外的用途。例如,x%1 表示x的小数部分,x-x%1 表示x的整数部分。类似的,x-x%0.01 将x精确到小数点后2位。

2.关系操作符

Lua提供了如下关系操作符:

<    >    <=    >=    ==    ~=

所有这些操作符产生的结果都是true或者false

'=='检查是否相等,'~='检查是否不等。这两个操作符可以作用于任意的两个值。如果要比较的两个值是不同的类型,那么Lua认为它们是不等的。否则,Lua根据它们的类型来比较它们是否相等。特例,nil只等于它本身。

Lua根据引用来比较table, userdata, function,也就是说,只有二者是同一个对象的时候,它们才相等。例如:

a = {}; a.x = 1; a.y = 0
b = {}; b.x = 1; b.y = 0
c = a

执行下上面的代码,你可以得到, a == c, 但是 a ~= b

我们把<, >, <=, >=成为order operator。

order operator只能应用于数值和字符串。Lua根据字母表顺序来比较字符串的大小,字母表的顺序由本地设置决定。非数值和字符串的值只能比较相等或者不相等,不能用于order operator。

当比较两个不同类型的值时,你一定要小心:记住"0"和0是不同的。除此以外,2<15显然是true的,但是"2"<"15"是false的(根据字母表顺序比较)。为了避免不一致的结果,当你将string和number混合使用到order operator时,例如 2<"15",Lua会产生一个error。

  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容