表达式

表达式根据变量和文字值计算值。

  • 算术运算
  • 关系运算
  • 逻辑运算
  • 串联
  • 长度
  • 优先级

算术运算

对数字值执行算术运算。如果在算术运算中使用字符串值,则将其转换为数字,如果失败,则返回错误。

   
a + b 添加 a 和 b
a-b 从 a 中减去 b
a * b 将 a 和 b 相乘
a/b 将 a 除以 b
a% b modulo = a - math.floor(a/b)*b
a ^ b 将 a 加到 b 次方;b 可以是任意数字
-a 否定 a

关系运算

关系运算比较两个值,如果关系得到满足,则返回 true;如果不满足,则返回 false。可以在任何类型的值之间执行关系运算。如果这些值的类型不同,则返回 false。数字以通常的方式进行比较。使用当前语言环境的整理序列对字符串进行比较。

   
a == b a 等于 b
a ~= b a 不等于 b
a < b a 小于 b
a > b a 大于 b
a <= b a 小于或等于 b
a >= b a 大于或等于 b

逻辑运算

传统上,逻辑运算是针对布尔值执行的,但是在这种语言中,逻辑运算可以对任意两个值执行。nil 和 false 被视为假,任何其他值都被视为真。逻辑运算使用快捷方式求值,其中如果第一个值决定运算结果,则不计算第二个值。

   
a 和 b 如果 a 为假或 nil 则返回 a 否则返回 b
a 或 b 如果 a 不是 false 也不是零,则返回 a 其他返回 b
不是 如果 a 不是 false 或 nil 返回 false 否则返回真

和和或操作可用于表达式中的条件评估:

   
a 或 b 如果 a 未初始化(nil),则可用于提供默认值 b。这对于函数中的可选参数很有用。
a 和 b 或 c 可用于根据条件 a 选择非 nil b 或 c。如果 a 为 true,那么 a 和 b 返回 b,b 或 c 返回 b,如果 a 为假,那么 a 和 b 返回假和 false,或 c 返回 c。这相当于一个? b:c 在 C 编程语言。

串联

字符串连接是 s1.. s2。这将创建一个足够大的新字符串,以容纳 s1 和 s2 的内容,并将内容复制到新字符串中。如果 s1 或 s2 不是字符串,则会出现错误。请注意,重复串联可能会产生相当大的复制开销。如果您通过一次连接一个字节来构建 n 字节的字符串,这将复制 n* (n+1) /2 字节。为了提高性能,可以将要连接的字符串片段放入表中(稍后讨论),然后使用 table.concat () 函数。COMBINE_HEADERS () 示例中显示了这方面的一个示例。

长度

字符串 s 的长度由 #s 返回。# 运算符也与数组表一起使用,如下文所述。

优先级

运算符优先级决定在表达式中执行操作的顺序,优先级较高的操作先于优先级较低的操作。像往常一样,优先顺序可以用括号覆盖。例如,在 a + b \* c,* 的优先级高于 +,因此表达式的计算结果为 a + (b \* c)

   
最高
- 不是 #-(一元)
-
  • / %
- ..
- = ~= < > <= >=
-
最低

优先级相同的操作从左到右(左关联)执行,但 ^ 和.. 除外,它们是从右到左(右关联)。所以一个 ^ b ^ c 被评估为 ^(b^ c)。

表达式