if-statement - Lua If 语句求值

标签 if-statement lua evaluation

如果我使用:

local a, b ,c 
a = 1
b = 1
c = 1

if a == (b or c) then x end

只有当 b 为真时,我才会得到响应 c 未被评估

如果我将其更改为

if (a == b or a == c) then x end

这可以正确评估 b 或 c

附:我在 Fibaro Home Center 3 家庭自动化系统中使用这个 Lua。

最佳答案

如果您想检查 a 是否等于 b 或 c,这是正确的语法:

if a == b or a == c then end

您的括号可以,但不是必需的。

local a, b ,c 
a = 1
b = 1
c = 1

if a == (b or c) then end

(b 或 c) 解析为 b,因此 if a == b then end

其原因称为短路评估。 b1,因此是一个真值。因此,无论 c 的值如何,ored 表达式都将为 true。因此没有理由评估c

来自https://www.lua.org/manual/5.4/manual.html#3.4.5

Both and and or use short-circuit evaluation; that is, the second operand is evaluated only if necessary. Here are some examples:

 10 or 20            --> 10
 10 or error()       --> 10
 nil or "a"          --> "a"
 nil and 10          --> nil
 false and error()   --> false
 false and nil       --> false
 false or nil        --> nil
 10 and 20           --> 20

这里也一样:

if a == b or a == c then end

如果a等于b,Lua不会检查a是否等于c。这不是太明显,但如果你有类似的东西:

local a = 1
function b() print("b") return 1 end
function c() print("c") return 1 end

if a == b() or a == c() then end

如果b的返回值等于a,Lua不会调用c

关于if-statement - Lua If 语句求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70619275/

相关文章:

java - 将 if 语句转换为 Java 中的条件运算符

关于比较的 R switch 语句

lua - 在 Lua 中只做一次文件

java - 如何进行n重交叉验证(Mahout)?

c# - 使用数学运算符评估字符串

python - Argparse::ask 1 或 3 个参数

java - 如何更改 if 和 for 在测试中断言

c++ - Lua errorPANIC : unprotected error in call to Lua API (attempt to call a nil value)

c++ - 使用 LuaBridge 将 LuaJIT 绑定(bind)到 C++ 导致 "PANIC: unprotected error"

Perl - 列表元素的评估顺序,在列表内赋值