【问题标题】:In Lua what does an if statement with only one argument mean?在 Lua 中,只有一个参数的 if 语句是什么意思?
【发布时间】:2012-05-25 01:18:43
【问题描述】:

我被教导用 Java 编程。 Lua 对我来说是新的,我试图做我的功课,但不确定以下性质的 if 语句是什么意思。

代码如下:

local function getMinHeight(self)
    local minHeight = 0
    for i=1, minimizedLines do
        local line = select(9+i, self:GetRegions())
        **if(line) then
            minHeight = minHeight + line:GetHeight() + 2.5
        end**
    end
    if(minHeight == 0) then
        minHeight = select(2, self:GetFont()) + 2.5
    end
    return minHeight
end

之前和之后带有 ** 的 if 语句是我不确定的部分。我不知道 if 语句正在检查什么。如果该行不为零?如果线路存在?如果是什么?

【问题讨论】:

    标签: if-statement lua arguments


    【解决方案1】:

    在 Lua 中,任何不是 nil 或 false 的东西都会在条件条件下计算为真。

    如果该行不为零?如果线路存在?

    两者都同意,因为它们的意思是一样的。

    select 函数从它的参数列表中返回一个特定的参数。它主要与... 一起使用,但在这种情况下,它用于选择self:GetRegions 返回的第(i+9) 个值。如果没有这样的值(例如,如果 GetRegions 只返回 5 个值),则 select 返回 nil。

    if(line) 正在检查它是否从select 获得了返回值。

    if(line) 被用作if(line ~= nil) 的快捷方式,因为 nil 在条件中的计算结果为 false。


    值得指出的是,这个快捷方式并不总是合适的。例如,我们可以像这样迭代表中的所有值:

    key, val = next(lookup)
    while key do
        print(key, val)
        key, val = next(lookup, key)
    end
    

    但是,如果表的键之一是false,这将失败:

    lookup = { 
        ["fred"] = "Fred Flinstone",
        [true] = "True",
        [false] = "False", 
    }
    

    所以我们必须明确检查nil:

    key, val = next(lookup)
    while key ~= nil do
        print(key, val)
        key, val = next(lookup, key)
    end
    

    【讨论】:

    • 感谢您的解释。我很感激。
    • 很棒的答案,非常感谢!再次抱歉说参数而不是表达:D
    【解决方案2】:

    正如 Mud 所说,在 lua 中,除了 nil 和 false 之外的任何内容都被认为是真实的。所以只要line 不是nil 或false,上面的if 就会通过。

    也就是说,你对问题的表述方式让我有点担心 - “如果只有一个论点”。

    首先,它不叫“论据”——它叫表达式。在大多数语言中总是一个。例如,在 java 中,您可以执行以下操作:

    bool found = false
    
    ...
    
    if(found) {
      ...
    }
    

    ifs 只关心表达式的最终值;他们不在乎它是单个变量还是更复杂的结构。

    【讨论】:

    • 明白了,感谢您的澄清。以后我的术语会更准确。感谢您解释这一点:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2019-09-29
    • 1970-01-01
    • 2011-11-18
    • 2011-08-15
    • 2021-09-18
    相关资源
    最近更新 更多