Lua中的if语句:如果A不等于(X或Y或Z)?

所以我有一个接受整数的函数。但是它不起作用,我怀疑 if 语句无效,我在谷歌中找不到任何有关此问题的信息,也许是我的谷歌搜索技巧太差了。

if mynumber != (0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8) then
            print("请选一个介于1-8之间的整数")
end

感谢任何帮助!!

点赞
用户258523
用户258523

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

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 的答案中关于该行代码逻辑的讨论以及如何正确测试的内容。

2014-11-23 13:54:49
用户3609100
用户3609100
  1. 在 Lua 中,检查两个元素是否不相等需要使用"~="而不是"!="。
  2. 如果您在 if 语句中比较两个元素,请始终记住这些元素应该返回布尔值,所以:不要使用mynumber != (0 or 1 or...),而应该尝试类似 (mynumber ~= 0) or (mynumber ~= 1) ...
2014-11-23 13:54:59
用户1009479
用户1009479

其他人已经指出了您存在的主要问题,即 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
2014-11-23 14:08:46
用户1190388
用户1190388

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

function FindIn( tInput, Value )
  for _ in pairs( tInput ) do
    if Value == tInput[_] then return true end
  end
  return false
end

如果 FindIn( {1,2,3,4,5,6,7,8}, mynumber ) then
  -- ...
end
2014-11-23 15:35:37
用户9268948
用户9268948

你可以用如下简单的方法来实现...(mynumber 必须是整数变量)

如果 mynumber<0 或 mynumber>8,则
    打印("请选择一个 1-8 之间的整数")
结束
2018-03-15 11:02:14