If statement Lua如果是的话!=(X或Y或Z)?

If statement Lua如果是的话!=(X或Y或Z)?,if-statement,lua,If Statement,Lua,我有一个函数,它接受一个整数。但它不起作用,我怀疑if声明是无效的,我在谷歌上找不到关于这个问题的任何信息,也许我的谷歌搜索技能太差了 if mynumber != (0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8) then print("Please choose an integer number between 1-8") end 谢谢你的帮助 正确。这不是你测试那样东西的方式。不能以这种方式测试多个值

我有一个函数,它接受一个整数。但它不起作用,我怀疑if声明是无效的,我在谷歌上找不到关于这个问题的任何信息,也许我的谷歌搜索技能太差了

if mynumber != (0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8) then
            print("Please choose an integer number between 1-8")            
end

谢谢你的帮助

正确。这不是你测试那样东西的方式。不能以这种方式测试多个值


要求两边都有表达式,并计算为单个表达式。所以
(0或1或2或3或4或5或6或7或8)
计算为
0
,您的最终表达式就是
if mynumber!=0然后

要测试这样的多个值,您需要在多个比较表达式周围使用

如果(mynumber~=0)或(mynumber~=1)或(mynumber~=2)。。。然后
(还要注意,
~=
是不相等运算符not
!=

另外,请务必注意YuHao关于这一行逻辑的回答,以及如何正确测试这一点。

尝试以下方法:

  • 在Lua中,通过“~=”而不是“!=”检查两项是否不相等
  • 若比较If语句中的两个项,那个么请始终记住,项应该返回布尔值,所以:而不是
    mynumber!=(0或1或…)
    尝试类似于
    (mynumber~=0)或(mynumber~=1)…。

  • 其他人指出了您存在的主要问题,即,
    0或1或2或3或4或5或6或7或8
    评估为
    0
    ,其余部分由于短路而被忽略。你需要用这些数字一个接一个地测试数字

    然而,还有最后一个陷阱。状况

    if mynumber ~= 0 or mynumber ~= 1 then
    
    始终为真,因为数字不等于
    0
    ,在这种情况下
    mynumber~=0
    为真;或者它等于
    0
    ,在这种情况下
    mynumber~=1
    为真

    正确的逻辑应该是:

    if mynumber ~= 0 and mynumber ~= 1 then
    

    Etan的回答解释了lua中观察到的行为。我建议编写一个自定义的
    FindIn
    函数来搜索:

    function FindIn( tInput, Value )
      for _ in pairs( tInput ) do
        if Value == tInput[_] then return true end
      end
      return false
    end
    
    if FindIn( {1,2,3,4,5,6,7,8}, mynumber ) then
      -- ...
    end
    

    你可以用……做得很简单。。。。(mynumber必须是整数变量)

    如果我的号码是8,那么
    打印(“请选择1-8之间的整数”)
    结束
    
    “0或1或2或3或4或5或6或7或8”返回0,如果a>=0,为什么不使用
    进行测试,并且在哈希上实现此函数比在数组/列表上实现此函数要快得多(如果在创建搜索表时多键入一点)。
    
    if mynumber<0 or mynumber>8 then
        print("Please choose an integer number between 1-8")
    end