所以我有这个函数接受一个整数。但它没有用,我怀疑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 :(得分: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)
试试这个:
mynumber != (0 or 1 or...)
尝试类似(mynumber ~= 0) or (mynumber ~= 1) ...
答案 4 :(得分:0)
您可以使用....(mynumber必须是整数变量)
if mynumber<0 or mynumber>8 then
print("Please choose an integer number between 1-8")
end