【问题标题】:Check if all statements are false?检查是否所有陈述都是错误的?
【发布时间】:2013-01-17 10:33:35
【问题描述】:

有没有办法只在多条语句为假时才执行一行代码?

我有一个库存:

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}
}

我想写一个函数,如果所有这些语句都是假的,它会执行一行代码,但如果其中一个是真的,显然会执行别的东西。

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    你可以使用一个变量,并假设它是真的

    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

    【讨论】:

    • 这似乎非常复杂......我实际上通过使用 if (inventory[1][2] == false 和 inventory[2][2] == false 并且,等等等等...不是最漂亮的代码,但它似乎工作
    • @Cleverbird 如果您想在库存中添加一些东西怎么办?您需要在if 语句中添加另一个子句。我的方法只是一个for 循环,无论库存中的元素数量如何,它都可以工作。此外,您可以按照自己的意愿将此代码放入函数中。
    • @Cleverbird 看来您不了解一些非常基本的编程概念,例如loops,因此我建议您先阅读一些教程或文档。
    • 问题是,我需要自己能够理解代码,而我真的不知道代码的 sn-p 到底是做什么的。我宁愿不要盲目地复制粘贴代码,不知道它做了什么。
    • @Cleverbird 这不是问题。您应该立即要求澄清。