1

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

4

2 回答 2

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

但是,如果表的键之一发生,这将失败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
于 2012-05-24T15:40:48.657 回答
2

正如 Mud 所说,在 lua 中,除了niland之外的任何东西都false被认为是真实的。因此if,只要lineisnil或,上述内容就会通过false

就是说,这让我有点担心您提出问题的方式-“如果只有一个论点”。

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

bool found = false

...

if(found) {
  ...
}

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

于 2012-05-24T16:54:42.037 回答