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

ash*_*osh 2 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)
Run Code Online (Sandbox Code Playgroud)

Mud*_*Mud 12

if a == 40 or 42 then
Run Code Online (Sandbox Code Playgroud)

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

if (a == 40) or (42) then
Run Code Online (Sandbox Code Playgroud)

在Lua中,任何没有nilfalse评估为真的东西,42在这个表达式中也是如此.所以你真正写的是:

if (a == 40) or true then
Run Code Online (Sandbox Code Playgroud)

这与以下相同:

if true then
Run Code Online (Sandbox Code Playgroud)

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

if (a == 40) or (a == 42) then
Run Code Online (Sandbox Code Playgroud)