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

1 lua arguments if-statement

我被教过用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
Run Code Online (Sandbox Code Playgroud)

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

Mud*_*Mud 8

在Lua中,任何在条件中没有nilfalse评估为真的东西.

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

对两者都是肯定的,因为它们意味着同样的事情.

select函数从其参数列表中返回一个特定参数.它主要用于...,但在这种情况下,它用于选择返回的第(i + 9)个值self:GetRegions.如果没有这样的值(例如,如果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
Run Code Online (Sandbox Code Playgroud)

但是,如果其中一个表的键发生,则会失败false:

lookup = { 
    ["fred"] = "Fred Flinstone",
    [true] = "True",
    [false] = "False", 
}
Run Code Online (Sandbox Code Playgroud)

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

key, val = next(lookup)
while key ~= nil do
    print(key, val)
    key, val = next(lookup, key)
end
Run Code Online (Sandbox Code Playgroud)