2010-07-02 1 views
12

Lua-Funktionen können mehrere Ergebnisse zurückgeben:Wie kann ich die ersten Ergebnisse einer Funktion in Lua ignorieren?

a, b, c = unpack({'one', 'two', 'three'}) 

Wenn ich in der dritten Rückgabewert nicht interessiert bin, kann ich wählen, um es zu ignorieren, wenn die Funktion aufrufen:

a, b = unpack({'one', 'two', 'three'}) 

Gibt es eine ähnliche Möglichkeit, die ersten X-Elemente beim Aufruf der Funktion zu ignorieren?

Ich könnte diesen Code schreiben, wenn ich will nur den dritten Rückgabewert, aber ich frage mich, ob ein sauberer Code vorhanden ist:

_, _, c = unpack({'one', 'two', 'three'}) 

Antwort

13

Sie die Funktion select verwenden können. Es gibt alle Argumente nach index zurück, wobei index das erste Argument ist, das select gegeben wird.

Beispiele:

c = select(3, unpack({'one', 'two', 'three'})) 
b, c = select(2, unpack({'one', 'two', 'three'})) 
b = select(2, unpack({'one', 'two', 'three'})) --discard last return value 

Das heißt, ich glaube, den meisten Fällen in, Schreiben _,_,c = f() sauberer ist. select ist meistens nützlich, wenn die Argumentnummer nicht im Voraus bekannt ist, oder wenn Funktionsaufrufe zusammen verkettet werden (z. B. f(select(2, g())))

+0

Genau das, was ich gesucht habe, danke! –

Verwandte Themen