为什么'如果a = = 40或42'在'a'为47时评估为'true'?

时间:2012-06-20 10:11:41

标签: lua lua-5.2

我是Lua的新手,并尝试在我的代码中完成这种类型的操作,但它不起作用。这里的语法和all都是绝对正确的,但是elseif条件是为了折腾,条件检查是错误的。

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

我使用的Lua版本是5.2

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

a = 47
call(a)

3 个答案:

答案 0 :(得分:12)

if a == 40 or 42 then

您希望将a与40 42进行比较,但==不能正常运行。它是一个二元运算符,它只比较两个项目,只有两个项目,所以Lua看到你的代码如下:

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

在Lua中,任何不是nilfalse的内容都评估为true,因此42在此表达式中为真。所以你真正写的是:

if (a == 40) or true then

与以下内容相同:

if true then

所有比较运算符都是二进制运算符(即两个且只有两个操作数),因此您希望将a与多个事物进行比较,您需要使用多个比较运算符:

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

答案 1 :(得分:3)

您错误地使用了关系运算符。 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)

编辑

对不起。泥确实是对的。谢谢你指出这一点。 编辑我的回答。

答案 2 :(得分:0)

'如果47 == 40或42'是三元语句。如果47 == 40则返回true,如果为false,则返回42。 “真实”和“42”都不是假的。

如果你希望它在a等于40或42时返回true,你可以把它写成:

'如果a == 40或a == 42'