Lua中的奇怪if语句

好的,我对 Lua 语言是新手,所以这可能是个非常愚蠢的问题,但我遇到了下面的语句,我不知道它的含义(即使经过了一些搜索)。

if (...) then

   -- 做一些事情

end

... 是什么意思呢?

点赞
用户12048
用户12048

...vararg 函数 中使用,其值是当前函数中最后一个命名参数之后的所有“额外”参数的列表。

(...)(和任何其他括号中的表达式一样)将结果调整为一个值(列表中的第一个值)。

因此,该 if 语句的有效含义是“如果第一个可变参数存在且不为 falsenil”。

例如:

local function f1(...)
  if (...) then
    return true
  else
    return false
  end
end

local function f2(x, ...)
  if (...) then
    return true
  else
    return false
  end
end

print(f1())       -- false
print(f1(1))      -- true
print(f1(1, 2))   -- true
print(f1(1, nil)) -- true
print(f1(nil, 2)) -- false

print(f2())       -- false
print(f2(1))      -- false
print(f2(1, 2))   -- true
print(f2(1, nil)) -- false
print(f2(nil, 2)) -- true

在顶层(即不在 function ... end 形式内部)时,它仍然以相同的方式工作,但当前函数是一个 _chunk_(即脚本或模块)。

如果是一个模块,则 (...) 给出模块名。但是,此时 if (...) 测试将没有用,因为第一个参数始终是一个字符串。

如果是一个脚本,则 (...) 给出第一个命令行参数(并且 if (...) 测试是否提供了任何参数)。

2013-11-16 03:28:40
用户1009479
用户1009479

...用于函数参数,表示该函数是可变参数的。它可以在函数内部作为表达式使用,表示函数的额外参数。

例如,该函数接受一个固定参数加上可变参数:

function vafun(num, ...)
    if (...) then
        for _, v in ipairs{...} do
            print(v)
        end
    else
        print("empty var")
    end
end

if(...)测试变量参数部分是否为空。

vafun(3, 4, 5)
vafun(3)
vafun()

输出:

4
5
empty var
empty var
2013-11-16 03:33:51