2012-06-20 52 views
2

我是Lua的新手,並試圖在我的代碼中完成這種類型的操作,但它不起作用。這裏的語法和一切都是絕對正確的,但elseif條件是要拋棄,而條件檢查出錯了。當'a'是47時,爲什麼'如果一個== 40或42'評價爲'真'?

因此,對於這個輸出,我得到的是:價值= 40或42,這是不對的

,我使用的Lua版本是5.2

function call(a) 
    print (a) 
    if a == 40 or 42 then 
    print ("Value = 40 or 42") 
    elseif a == 43 or 45 then 
    print ("Value = 43 or 45") 
    elseif a == 46 or 47 then 
    print ("Value = 46 or 47") 
    end 
end 

a = 47 
call(a) 

回答

3

您正在使用關係運算符錯。 or需要兩個參數。參數1是關係表達式(a == 40)和參數2僅僅是相對於(A == 42)

你想幹什麼(a==40) or (a==42),但發生的事情是(a==40) or (42)

所以你的代碼數量42應該是:

function call(a) 
    print (a) 
    if a == 40 or a == 42 then 
     print ("Value = 40 or 42") 
    elseif a == 43 or a == 45 then 
     print ("Value = 43 or 45") 
    elseif a == 46 or a == 47 then 
     print ("Value = 46 or 47") 
    end 
end 

a = 47 
call(a) 

編輯

對不起。泥真的是對的。謝謝指出。 編輯我的答案。

+0

-1:泥對於優先權是正確的; ['或'*優先級低於'=='。](http://www.lua.org/manual/5.2/manual.html#3.4.7) –

+0

謝謝。編輯我的答案! – SatheeshJM

+0

@SatheeshJM - 感謝您刪除錯誤的信息,但您的回答現在除了Mud已經寫下的內容之外沒有任何其他內容。 –

12
if a == 40 or 42 then 

你想a被比作兩個40 42,但==不工作的方式。這是一個二元運算符,它比較兩個,只有兩個項目,所以Lua中看到你這樣的代碼:

if (a == 40) or (42) then 

在Lua中,任何非nilfalse評估爲真,那麼42在此表達真實的。所以,你真的寫的是:

if (a == 40) or true then 

這是一樣的:

if true then 

所有的比較操作符都是二元(即,兩個,只有兩個操作數),所以你要比較a來比一件事,你需要使用多個比較運算符:

if (a == 40) or (a == 42) then 
0

'if 47 == 40 or 42'is a ternary statement。如果47 == 40,則返回true;如果爲false,則返回42. 'true'和'42'都不是假。

如果你希望它返回true,如果是等於40或42,你會寫它:

「如果== 40或42 ==」

相關問題