table.unpack () gibt nur das erste Element [duplicate] zurück

8

Kann mir jemand erklären, warum table.unpack() das erste Tabellenelement nur dann zurückgibt, wenn es in einem Funktionsaufruf mit zusätzlichen Parametern nach table.unpack() ?

verwendet wird?

Hier ist ein Demo-Code:

%Vor%

Ich verstehe nicht, warum die zweite Zeile nur 1 Test ausgibt. Ich würde erwarten, dass 1 2 3 4 5 Test gedruckt wird. Kann jemand dieses Verhalten erklären? Ich wäre auch daran interessiert, wie ich den zweiten Aufruf zum Drucken von 1 2 3 4 5 Test machen kann.

    
Andreas 07.09.2015, 13:16
quelle

2 Antworten

9

table.unpack gibt mehrere Werte zurück. Das definierte Verhalten in diesem Fall ist, dass, wenn es nicht das letzte in einer Liste von Ausdrücken ist, alle außer dem ersten zurückgegebenen Wert verworfen werden.

Aus dem Buch :

  

Lua passt die Anzahl der Ergebnisse einer Funktion immer an die Umstände des Anrufs an. Wenn wir eine Funktion als Anweisung aufrufen, verwirft Lua alle seine Ergebnisse. Wenn wir einen Aufruf als Ausdruck verwenden, behält Lua nur das erste Ergebnis. Wir erhalten alle Ergebnisse nur, wenn der Aufruf der letzte (oder einzige) Ausdruck in einer Liste von Ausdrücken ist.

Als Workaround können Sie die restlichen Argumente an die Tabelle anhängen und die Tabelle so zum letzten Argument machen.

    
ntki 07.09.2015, 13:25
quelle
4

table.unpack() gibt in beiden Fällen dasselbe zurück, aber im zweiten Fall erwartet Lua nur einen Wert, so dass es nicht zu mehreren Argumenten wird. Wenn es das letzte Argument ist, ist Lua in Ordnung mit mehreren Argumenten.

    
chicks 07.09.2015 13:23
quelle

Tags und Links