2013-01-17 86 views
1

只有多個語句爲false時,纔有辦法執行一行代碼?檢查是否所有的陳述都是錯誤的?

我有一個清單:

inventory = { 
    {"Images/Category 1/pistol1.png", false}, 
    {"Images/Category 1/machinePistol1.png", false}, 
    {"Images/Category 2/shotgun1.png", false}, 
    {"Images/Category 2/assaultRifle1.png", false}, 
    {"Images/Category 3/sniperRifle1.png", false}, 
    {"Images/Category 3/rocketLauncher1.png", false} 
} 

而且我想編寫一個執行一行代碼的函數,如果所有這些語句都是假的,但顯然執行別的東西,如果他們中的一個,即使是真實的。

回答

5

您可以使用一個變量,並假設這是真的。如果你想讓它與多個 falses執行

local IsEverythingTrue = true 

-- the **for** statement is a loop. It will allow us to operate 
-- the same way on any number elements in inventory. 
-- _,v stands for variables that we are going to read from inventory table 
-- we can't do it directly, however; **ipairs** function will prepare it so 
-- _ will hold numerical index of each element (1, 2, 3 and so on); 
-- we don't use it, though, so I put in a placeholder name 
-- v will hold every value, so your two-element table 

for _,v in ipairs(inventory) do 

    -- if any value of v[2] is false, break 
    -- v[2] is equal to inventory[_][2] 
    -- if not v[2] can be written as 
    -- *if value of v[2] isn't true* 

    if not v[2] then 
     -- in this case, after first non-true element has been found 
     -- we know that not every one is true, or there is at least one false 
     IsEverythingTrue = false 
     break -- we don't have to check anything else 
    end 
end 

然後使用該變量表達

if IsEverythingTrue then 
    -- do something 
else 
    -- do something else 
end 

,只是指望他們。在開始時添加local falseCount = 0,並將break更改爲falseCount = falseCount + 1

+0

這似乎非常複雜......我實際上設法通過使用if(inventory [1] [2] == false和inventory [2] [2] == false等)來解決它。 。不是最漂亮的代碼,但它似乎工作 – Cleverbird

+0

@Cleverbird如果你想添加一些東西到庫存中,你將需要在你的if語句中添加另一個子句,我的方法只是一個for循環,無論庫存中的元素數量如何,這都可以工作。此外,您可以將這些代碼放入函數中,就像您想要的一樣。 –

+0

@Cleverbird看起來您並不瞭解編程的一些基本概念,比如'loops'我建議先閱讀一些教程或文檔 –

相關問題