我被教过用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语句正在检查什么。如果线不是零?如果该行存在?如果是什么?
答案 0 :(得分:8)
在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
答案 1 :(得分:2)
正如Mud所说,除了nil
和false
以外的任何内容都被视为 truthy 。因此,只要if
不是line
或nil
,上面的false
就会通过。
那就是说,它让你有点担心这个问题的方式 - “如果只有一个论点”。
首先,它不被称为“参数” - 它被称为表达式。在大多数语言中,总是一个。例如,在java中,您可以执行以下操作:
bool found = false
...
if(found) {
...
}
if
只关心表达式的最终值;他们不关心它是单一变量还是更复杂的结构。