Rom*_*kov 5 lua variadic-functions
似乎在Lua中,我可以将vararg传递给另一个函数,或者通过它们看一眼arg,但不是两者.这是一个例子:
function a(marker, ...)
print(marker)
print(#arg, arg[1],arg[2])
end
function b(marker, ...)
print(marker)
destination("--2--", ...)
end
function c(marker, ...)
print(marker)
print(#arg, arg[1],arg[2])
destination("--3--", ...)
end
function destination(marker, ...)
print(marker)
print(#arg, arg[1],arg[2])
end
Run Code Online (Sandbox Code Playgroud)
观察到a只看varargs,b只传递它们,而c两者都是.结果如下:
>> a("--1--", "abc", "def")
--1--
2 abc def
>> b("--1--", "abc", "def")
--1--
--2--
2 abc def
>> c("--1--", "abc", "def")
--1--
test.lua:13: attempt to get length of local 'arg' (a nil value)
stack traceback:
...test.lua:13: in function 'c'
...test.lua:22: in main chunk
[C]: ?
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我不应该把两者结合起来吗?为什么不?
Dou*_*rie 10
使用的arg是过时了.试试这个:
function a(marker, ...)
print(marker)
print(select('#',...), select(1,...), select(2,...))
end
function b(marker, ...)
print(marker)
destination("--2--", ...)
end
function c(marker, ...)
print(marker)
print(select('#',...), select(1,...), select(2,...))
destination("--3--", ...)
end
function destination(marker, ...)
print(marker)
print(select('#',...), select(1,...), select(2,...))
end
Run Code Online (Sandbox Code Playgroud)
这是你得到的:
> a("--1--", "abc", "def")
--1--
2 abc def
> b("--1--", "abc", "def")
--1--
--2--
2 abc def
> c("--1--", "abc", "def")
--1--
2 abc def
--3--
2 abc def
>
Run Code Online (Sandbox Code Playgroud)