tutorial - Lua desempaquetar() desordenar argumentos
lua tutorial (1)
Este comportamiento no es específico para unpack
. El Manual de referencia de Lua dice:
"Tanto las llamadas a funciones como las expresiones vararg pueden dar como resultado valores múltiples. Si una llamada a función se usa como una declaración (ver §3.3.6), entonces su lista de resultados se ajusta a cero elementos, descartando así todos los valores devueltos. utilizado como el último (o el único) elemento de una lista de expresiones, no se realiza ningún ajuste (a menos que la expresión esté entre paréntesis). En todos los demás contextos, Lua ajusta la lista de resultados a un elemento descartando todos los valores, excepto el primero o agregar un solo nil si no hay valores " .
(mi énfasis)
Tengo esta función de prueba que simplemente imprime valores pasados a ella
function test1(...)
for k, v in ipairs(arg) do
print(v)
end
end
function test2(...)
for k, v in pairs(arg) do
print(v)
end
end
-- GOOD behavior
test1(1, 2, 3, 4) -- produces 1 2 3 4
test2(1, 2, 3, 4) -- produces 1 2 3 4
-- BAD behavior
test1( unpack({1,2}), 3, 4) -- produces 1 3 4
test2( unpack({1,2}), 3, 4) -- produces 1 3 4 3
¿Puede alguien explicarme este comportamiento?