Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 为什么';如果a==40或42';评估为';正确';何时';a';47岁吗?_Lua_Lua 5.2 - Fatal编程技术网

Lua 为什么';如果a==40或42';评估为';正确';何时';a';47岁吗?

Lua 为什么';如果a==40或42';评估为';正确';何时';a';47岁吗?,lua,lua-5.2,Lua,Lua 5.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

我是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)

您错误地使用了关系运算符
接受两个参数。参数1是关系表达式(a==40),参数2只是数字42,而不是(a==42)

您想执行
(a==40)或(a==42)
,但所发生的是
(a==40)或(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)
编辑

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

if a == 40 or 42 then
您希望将
a
与40和42进行比较,但
=
不能这样工作。这是一个二进制运算符,它比较两个且仅比较两个项目,因此Lua看到的代码如下所示:

if (a == 40) or (42) then
在Lua中,任何非
nil
false
的值均为true,因此
42
在此表达式中为true。所以你真正写的是:

if (a == 40) or true then
这与:

if true then
所有比较运算符都是二进制的(即两个且只有两个操作数),因此要将
a
与多个对象进行比较,需要使用多个比较运算符:

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

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

如果要在a等于40或42时返回true,可以将其写成:


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

-1:Mud关于优先级是正确的@SatheeshJM-感谢您删除错误信息,但是您的回答现在除了Mud已经编写的内容之外,没有添加任何内容。