2015-04-27 12 views
6

Mam ta funkcja test, który po prostu drukuje wartości przekazane do niejLua rozpakowanie() Messing argumenty

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 

Może ktoś wyjaśnić ten problem dla mnie?

Odpowiedz

6

To zachowanie nie jest specyficzne dla unpack. Lua Reference Manual mówi.

„Oba wywołania funkcji i wyrażeń vararg może skutkować wieloma wartościami Jeśli wywołanie funkcji jest używany jako oświadczenie (patrz §3.3.6), a następnie lista jej powrót jest dostosowana do zera elementów , w ten sposób odrzucając wszystkie zwrócone wartości.Jeśli wyrażenie jest używane jako ostatni (lub jedyny) element listy wyrażeń, to nie jest dokonywane żadne dostosowanie (chyba że wyrażenie jest ujęte w nawiasy) We wszystkich innych kontekstach, Lua dostosowuje listę wyników do jednego elementu, odrzucając wszystkie wartości z wyjątkiem pierwszego lub dodając pojedynczą zero, jeśli nie ma żadnych wartości. "

(mój nacisk)

+0

Dzięki. Tego właśnie szukałem :) –

+0

Dla ciekawskich: [gdzie wszyscy mogą mieć listę wyrażeń w Lua?] (Http://stackoverflow.com/a/31782250/183120) – legends2k