我是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)
答案 0 :(得分:12)
if a == 40 or 42 then
您希望将a
与40 和 42进行比较,但==
不能正常运行。它是一个二元运算符,它只比较两个项目,只有两个项目,所以Lua看到你的代码如下:
if (a == 40) or (42) then
在Lua中,任何不是nil
或false
的内容都评估为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'