Lua将这个表达不佳的表达解释为什么?
return 1 or 2 == 3 and 4
- > 1
当然不是从左到右踩过每个操作员:
return (1 or 2) == 3 and 4
- >假
是否正在反向评估?
答案 0 :(得分:5)
您可能习惯于具有不同优先级的算术运算符。例如,如果我们写1 + 2 * 3
,则假设乘法在1 + (2 * 3)
之前添加,而不是像(1 + 2) * 3
那样从左到右进行评估。这些标准数学优先级用于大多数编程语言。我能想到的唯一值得注意的反例是Smalltalk,它始终评估从左到右和语言,迫使你明确优先级(LISP和Forth)。
对于关系运算符和布尔运算符,编程语言习惯于扩展传统的算术优先级以覆盖语言中的所有运算符。 Lua的完整优先级表可以在这里找到:
http://www.lua.org/manual/5.2/manual.html#3.4.7
or
and
< > <= >= ~= ==
..
+ -
* / %
not # - (unary)
^
布尔值and
和or
运算符的优先级最低,因此1 or 2 == 3 and 4
将被解析为1 or ((2 == 3) and 4)
。