三元运算符
lua 中的三元运算符语法为:
(a and {b} or {c})[1]
其原因是 Lua 中的 and 和 or 语法和其它语言中的含义不同,具体为:
对于 and 运算符,表达式 a and b 会在 a 解释为 false 时返回 a,否则返回 b
对于 or 运算符,表达式 a or b 会在 a 解释为 true 时返回 a,否则返回 b
根据这个说法,三元运算符要求 a 为真时返回 b,a 为假时返回 c。则运算符为 a and b or c
但是上述表达式对于 a and false or c 不适用,因为:
第一阶段中 a and false 结果总是 false
第二阶段中 false or c 中结果总是 c
也就是说 a and false or c 总是会返回 c。这很明显和我们的预期不同。一种简单的方式就是让 b 使用 table 包装起来,使其总是为 true。另一方面,为了统一类型,将 c 也用 table 包装起来。就形成了
(a and {b} or {c})[1]
替代品
下面的表格列出了一些 lua 方言和拓展品:
语言 | 类型 | 作用 |
---|---|---|
htts://github.com/terralang/terra[terra] | lua 拓展 | 加入了模板编程 |