当'a'为47时,为什么'if a == 40 or 42'评估为“true”?

我是 Lua 的新手,试图在我的代码中完成此类型的操作,但它并没有奏效。在这里语法和所有东西都是绝对正确的,但是 elseif 条件块出现了问题,条件检查出现了错误。

因此,我得到的输出是:Value = 40 or 42,这是错误的

我正在使用的 Lua 版本是 5.2

function call(a)
    print(a)
    if a == 40 or a == 42 then
        print("Value = 40 or 42")
    elseif a == 43 or a == 45 then
        print("Value = 43 or 45")
    elseif a == 46 or a == 47 then
        print("Value = 46 or 47")
    end
end

a = 47
call(a)
点赞
用户1137788
用户1137788

你使用关系运算符有误。 or 需要两个参数。参数 1 是关系表达式(a == 40),参数 2 只是数字 42,而不是(a == 42)

你希望执行 (a == 40) or (a == 42) 但是发生的是 (a == 40) or (42)

所以你的代码应该是:

function call(a)
    print (a)
    if a == 40 or a == 42 then
        print ("Value = 40 or 42")
    elseif a == 43 or a == 45 then
        print ("Value = 43 or 45")
    elseif a == 46 or a == 47 then
        print ("Value = 46 or 47")
    end
end

a = 47
call(a)

编辑

对不起,Mud 的确是对的。感谢指出这一点。我已经编辑了我的回答。

2012-06-20 10:48:43
用户501459
用户501459

如果 a 等于 40 或 42,那么:

你想要将 a 同时与 40 和 42 进行比较,但 == 并不支持这种方式。它是一个二元操作符,只能比较两个元素,因此 Lua 会将你的代码看作:

if (a == 40) or (42) then

在 Lua 中,任何不是 nilfalse 的值都会被视为 true,所以这个表达式中的 42 是 true。所以你实际上写的是:

if (a == 40) or true then

这与以下代码相同:

if true then

所有比较操作符都是二元的(即只有两个操作数),如果你想要将 a 与多个值进行比较,就需要使用多个比较操作符:

if (a == 40) or (a == 42) then
2012-06-20 16:58:32
用户1510913
用户1510913

'if 47 == 40 or 42'是一个三元语句。如果47等于40,则返回true;否则返回42。'true''42'都不是false。

如果要使其在a等于40或42时返回true,则应写为:

if a == 40 or a == 42
2013-01-13 17:01:45