Кажется, что в 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
Наблюдайте это 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]: ?
Что я делаю неправильно? Разве я, как предполагается, не комбинирую два? Почему нет?
Использование 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
Вот что вы получите:
> 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
>
Вы можете использовать select()
для изучения ...
, не прибегая к arg
таблицы:
firstarg = select(1, ...)
secondarg = select(2, ...)
и так далее.
Я не уверен, почему у вас возникли проблемы с комбинированием этих двух методов, однако - в моем опыте их смешивание (и различные операции над любым из них) не было проблемой.
Для количества аргументов нужно выбрать. Чтобы посмотреть на них, вы можете сделать следующее:
local first,second,third = ...