2

我是 Lua 的新手,并试图在我的代码中完成这种类型的事情,但它不起作用。这里的语法和一切都是绝对正确的,但是 elseif 条件会被折腾,条件检查会出错。

因此,为此我得到的输出是:Value = 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)
4

3 回答 3

13
if a == 40 or 42 then

您想a与 4042 进行比较,但==不是这样。这是一个二元运算符,它比较两个且仅两个项目,所以 Lua 看到你的代码是这样的:

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

在 Lua 中,任何不为真nilfalse评估为真的东西,42在这个表达式中都是真。所以你真正写的是:

if (a == 40) or true then

这与以下内容相同:

if true then

所有比较运算符都是二元的(即两个且只有两个操作数),因此您想要比较a多个事物,您需要使用多个比较运算符:

if (a == 40) or (a == 42) then
于 2012-06-20T16:58:32.967 回答
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)

编辑

对不起。泥确实是对的。感谢您指出这一点。编辑了我的答案。

于 2012-06-20T10:48:43.757 回答
0

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

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

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

于 2013-01-13T17:01:45.837 回答