Igo*_*rio 3 lua operator-precedence
Lua将这个形式不佳的表达解释为什么?
return 1 or 2 == 3 and 4 - > 1
当然不是从左到右踩过每个操作员:
return (1 or 2) == 3 and 4 - >假
它反过来评估吗?
您可能习惯于具有不同优先级的算术运算符.例如,如果我们写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)
^
Run Code Online (Sandbox Code Playgroud)
布尔值and和or运算符具有最低优先级,因此1 or 2 == 3 and 4将被解析为1 or ((2 == 3) and 4).