2013-08-03 107 views
1

這是我的代碼。我正在玩Tekkit,想要控制水流量。在棕色電線上有紅石電源,但不是黑色,但它仍然會到ERROR!任何人都知道我的問題是什麼?如果語句不工作在Lua

在Lua代碼:

shell.run("clear") 
brown = rs.testBundledInput("back", colors.brown) 
black = rs.testBundledInput("back", colors.black) 
t = true 
f = nil 

if brown == t and black == f then 
    redstone.setBundledOutput("back", restone.getBundledOutput("back") -colors.brown) 
    print("All water is flowing.") 
    sleep(3) 
    shell.run("2") 
elseif brown == f and black == t then 
    redstone.setBundledOutput("back", restone.getBundledOutput("back") -colors.black) 
    print("All water is flowing.") 
    sleep(3) 
    shell.run("2") 
elseif brown == t and black == t then 
    redstone.setBundledOutput("back", restone.getBundledOutput("back") -colors.brown) 
    redstone.setBundledOutput("back", restone.getBundledOutput("back") -colors.black) 
    print("All water is flowing.") 
    sleep(3) 
    shell.run("2") 
elseif brown == f and black == f then 
    print("All water is flowing.") 
    sleep(3) 
    shell.run("2") 
else 
    print("ERROR!") 
end 
+2

正確的縮進會使你的代碼*多*易於閱讀。 –

+2

對不起,那個人..但t =真,f =零?爲什麼?認真的原因? – starmole

+0

同樣適用於全球的「棕色」和「黑色」。他們應該可能是「本地」。參見[Lua_中的程序設計](http://www.lua.org/pil/4.2.html)。 –

回答

7

從代碼,我猜brownblack是布爾類型,它們要麼truefalse。但你是他們比較:

t = true 
f = nil 

這是不正確的,因爲雖然雙方falsenil都是假的值,它們是不一樣的,即,false不等於nil。所以將其更改爲f = false

但是,這有點多餘,你不需要if語句中的tf。當您使用:

if brown == t and black == f then 

你可以用這個來代替對其進行測試:

if brown and not black then 
+0

幾分鐘後,我不停地看着問題中的''back'',並想知道爲什麼在答案中使用* brown *和* black *。 : -/ – hjpotter92

+0

友好的回答。謝謝你!但對我而言,這個問題只是創造一個新的問題:爲什麼有人會這樣做?這並不容易,更沒有意義..必須有一個原因?或者至少有一個故事? – starmole

+0

@starmole我不是在追問你的問題,你在「爲什麼會有人這樣做」中指「這個」是什麼意思,你的意思是「如果棕色而不是黑色」這樣的陳述? –