If statement 在Lua中,只有一个参数的if语句意味着什么?

If statement 在Lua中,只有一个参数的if语句意味着什么?,if-statement,lua,arguments,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 = mi

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

在Lua中,任何不是
nil
false
的内容在条件语句中计算为true

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

两个都是,因为它们的意思是一样的

select
函数从其参数列表中返回特定参数。它主要用于
,但在本例中,它用于选择由
self:GetRegions
返回的第(i+9)个值。如果没有这样的值(例如,如果GetRegions只返回5个值),则
select
返回nil

如果(行)
正在检查是否从
选择
返回值

if(line)
被用作
if(line~=nil)
的快捷方式,因为nil在条件语句中的计算结果为false


值得指出的是,这种捷径并不总是合适的。例如,我们可以迭代表中的所有值,如下所示:

key, val = next(lookup)
while key do
    print(key, val)
    key, val = next(lookup, key)
end
bool found = false

...

if(found) {
  ...
}
但是,如果表的某个键为
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

在Lua中,任何不是
nil
false
的内容在条件语句中计算为true

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

两个都是,因为它们的意思是一样的

select
函数从其参数列表中返回特定参数。它主要用于
,但在本例中,它用于选择由
self:GetRegions
返回的第(i+9)个值。如果没有这样的值(例如,如果GetRegions只返回5个值),则
select
返回nil

如果(行)
正在检查是否从
选择
返回值

if(line)
被用作
if(line~=nil)
的快捷方式,因为nil在条件语句中的计算结果为false


值得指出的是,这种捷径并不总是合适的。例如,我们可以迭代表中的所有值,如下所示:

key, val = next(lookup)
while key do
    print(key, val)
    key, val = next(lookup, key)
end
bool found = false

...

if(found) {
  ...
}
但是,如果表的某个键为
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

正如Mud所说,在lua中,除了
nil
false
之外的任何东西都被认为是真实的。因此,只要
不是
nil
false
,上面的
if将通过

也就是说,你的措辞让我有点担心——“只有一个论点的假设”

首先,它不叫“参数”——它叫表达式。在大多数语言中都是这样。例如,在java中,您可以执行以下操作:

key, val = next(lookup)
while key do
    print(key, val)
    key, val = next(lookup, key)
end
bool found = false

...

if(found) {
  ...
}

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

正如Mud所说,在lua中,除了
nil
false
之外的任何东西都被认为是真实的。因此,只要
不是
nil
false
,上面的
if将通过

也就是说,你的措辞让我有点担心——“只有一个论点的假设”

首先,它不叫“参数”——它叫表达式。在大多数语言中都是这样。例如,在java中,您可以执行以下操作:

key, val = next(lookup)
while key do
    print(key, val)
    key, val = next(lookup, key)
end
bool found = false

...

if(found) {
  ...
}

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

明白了,谢谢你的澄清。将来我的术语会更准确。感谢您的解释:DGotcha,感谢您的澄清。将来我的术语会更准确。谢谢你的解释:谢谢你的解释。我很感激。回答得很好,非常感谢!再次抱歉,我说的是论点而不是表达:谢谢你的解释。我很感激。回答得很好,非常感谢!再次抱歉,我说的是参数而不是表达式:D