好吧所以我是Lua语言的新手,所以这可能是一个非常愚蠢的问题,但我遇到了以下声明,我不知道这意味着什么(即使经过一些搜索)
if (...) then
-- Doing some stuff
end
...
是什么意思?
答案 0 :(得分:3)
...
。它的值是所有“额外”参数的列表(即那些跟随当前函数的最后一个命名参数的参数。)
(...)
(与括号中的任何其他表达式一样)将结果调整为一个值(列表中的第一个值)。
因此if
语句实际上意味着“如果第一个可变参数存在且不是false
或nil
。”
示例:
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
格式内)它仍然以相同的方式工作,但当前函数是块(即脚本或模块。)
如果是模块,(...)
会给出模块名称。但是if(...)
测试没有用,因为第一个参数总是一个字符串。
如果是脚本,(...)
会给出第一个命令行参数(以及if(...)
测试是否给出了任何参数。)
答案 1 :(得分:1)
...
来表示该函数是可变参数。它可以在函数内部用作表达式,表示函数的额外参数。
例如,此函数采用固定参数和变量参数:
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