所以我有這個函數需要一個整數。但它不起作用,我懷疑if語句是無效的,我在谷歌上找不到關於這個問題的任何內容,也許我的谷歌搜索技巧很糟糕。Lua if A!=(X或Y或Z)?
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語句是無效的,我在谷歌上找不到關於這個問題的任何內容,也許我的谷歌搜索技巧很糟糕。Lua if A!=(X或Y或Z)?
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
感謝您的任何幫助!
正確。這不是你如何測試這樣的事情。你不能以這種方式測試多個值。
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對這一行邏輯的回答以及如何正確測試。
試試這個:
mynumber != (0 or 1 or...)
嘗試像(mynumber ~= 0) or (mynumber ~= 1) ...
其他人指出你的主要問題,即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
總是爲真,因爲一些或者不等於0
,在這種情況下mynumber ~= 0
是真實的;或者它等於0
,在這種情況下mynumber ~= 1
爲真。
正確的邏輯應該是:
if mynumber ~= 0 and mynumber ~= 1 then
伊坦的答案的解釋是:在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
通過哈希實現此功能要比在數組/列表上實現它快得多(如果需要更多的輸入來創建搜索表)。 – 2014-11-23 17:36:35
「0或1或2或3或4或5或6或7或8」,則返回0沒有它 – Logo 2014-11-23 13:52:01
爲什麼不'如果測試a> = 0和a <= 8'? – Schollii 2014-11-23 15:31:17