在Lua中,只有一个参数的if语句是什么意思?

时间:2012-05-24 15:32:39

标签: if-statement lua arguments

我被教过用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语句正在检查什么。如果线不是零?如果该行存在?如果是什么?

2 个答案:

答案 0 :(得分:8)

在Lua中,任何不是nilfalse的条件都会在条件中评估为真。

  

如果这条线不是零?如果该行存在?

两者都是,因为他们的意思相同。

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

答案 1 :(得分:2)

正如Mud所说,除了nilfalse以外的任何内容都被视为 truthy 。因此,只要if不是linenil,上面的false就会通过。

那就是说,它让你有点担心这个问题的方式 - “如果只有一个论点”。

首先,它不被称为“参数” - 它被称为表达式。在大多数语言中,总是一个。例如,在java中,您可以执行以下操作:

bool found = false

...

if(found) {
  ...
}

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