Lua若A!=(X或Y或Z)?

时间:2014-11-23 13:44:11

标签: 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

感谢您的帮助!!

5 个答案:

答案 0 :(得分:3)

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

or需要两侧的表达式并计算单个表达式。因此,(0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8)评估为0,而您的最终表达仅为if mynumber != 0 then

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

if (mynumber ~= 0) or (mynumber ~= 1) or (mynumber ~= 2) ... then(另请注意~=是不等于运算符而不是!=)。

另外请务必注意YuHao关于此行中逻辑的答案以及如何正确测试。

答案 1 :(得分:2)

其他人已指出您遇到的主要问题,即0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8评估为0,其余因短路而被忽略。您需要逐个测试这些数字。

但是,还有最后一个陷阱。条件

if mynumber ~= 0 or mynumber ~= 1 then

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

正确的逻辑应该是:

if mynumber ~= 0 and mynumber ~= 1 then

答案 2 :(得分:1)

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

答案 3 :(得分:0)

试试这个:

  1. 在Lua中你用“〜=”而不是“!=”来检查两个项目是否相等,
  2. 如果您比较if语句中的两个项目,那么请始终记住项目应该返回布尔值,因此:而不是mynumber != (0 or 1 or...)尝试类似(mynumber ~= 0) or (mynumber ~= 1) ...
  3. 的内容

答案 4 :(得分:0)

您可以使用....(mynumber必须是整数变量)

if mynumber<0 or mynumber>8 then
    print("Please choose an integer number between 1-8")
end