我被教过用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语句正在检查什么.如果线不是零?如果该行存在?怎么样?
在Lua中,任何在条件中没有nil或false评估为真的东西.
如果线不是零?如果该行存在?
对两者都是肯定的,因为它们意味着同样的事情.
该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)