2015-04-27 13 views
6

Ho questa funzione di test che consente di stampare semplicemente i valori passati ad essoLua unpack() argomenti che pasticciano

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 

Qualcuno può spiegare questo comportamento a me?

risposta

6

Questo comportamento non è specifico per unpack. Il Lua Reference Manual dice:.

"Entrambe le chiamate di funzione e le espressioni vararg può portare a valori multipli Se una chiamata di funzione viene utilizzata come una dichiarazione (vedi §3.3.6), allora la sua lista di ritorno è regolato a zero elementi , quindi scartando tutti i valori restituiti Se un'espressione viene utilizzata come ultimo (o solo) elemento di un elenco di espressioni, non viene apportata alcuna regolazione (a meno che l'espressione non sia racchiusa tra parentesi) In tutti gli altri contesti, Lua regola la lista dei risultati a un elemento, scartando tutti i valori tranne il primo o aggiungendo un singolo zero se non ci sono valori "

(il mio accento)

+0

Grazie. Era quello che stavo cercando :) –

+0

Per i curiosi: [dove tutti possono avere una lista di espressioni in Lua?] (Http://stackoverflow.com/a/31782250/183120) – legends2k