2014-11-23 60 views
2

所以我有這個函數需要一個整數。但它不起作用,我懷疑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 

感謝您的任何幫助!

+0

「0或1或2或3或4或5或6或7或8」,則返回0沒有它 – Logo 2014-11-23 13:52:01

+3

爲什麼不'如果測試a> = 0和a <= 8'? – Schollii 2014-11-23 15:31:17

回答

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對這一行邏輯的回答以及如何正確測試。

0

試試這個:

  1. 在Lua中你檢查兩個項目是由 「=〜」,而不是不相等,
  2. 如果你比較if語句,然後永遠記住兩個項目 「=!」該項目應該返回布爾值,所以:不是mynumber != (0 or 1 or...)嘗試像(mynumber ~= 0) or (mynumber ~= 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 

總是爲真,因爲一些或者不等於0,在這種情況下mynumber ~= 0是真實的;或者它等於0,在這種情況下mynumber ~= 1爲真。

正確的邏輯應該是:

if mynumber ~= 0 and mynumber ~= 1 then 
1

伊坦的答案的解釋是:在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 
+1

通過哈希實現此功能要比在數組/列表上實現它快得多(如果需要更多的輸入來創建搜索表)。 – 2014-11-23 17:36:35

相關問題