2017-07-15 2 views
0

Ich habe vor kurzem eine neue Methode gesehen, zumindest für mich, Funktionen in Lua aufzurufen, und zwar mithilfe der geschweiften Klammern {}, wenn der Parameter eine Tabelle ist. Nehmen Sie diese Funktion als Beispiel dafür, was ich untersuchen will:Was ist der Unterschied zwischen {} und() beim Aufruf einer Funktion?

function test(table) 
    for _, i in pairs(table) do 
     print(i); 
    end 
end 

test{"What", "is", "the", "difference?"}; 

die Funktion Test In() aufrufen verwenden wir die geschweiften Klammern „{}“ anstelle der normalen Klammern „()“.

Also meine Fragen gehen, was ist der Unterschied zwischen diesen beiden? Was ist besser in der Leistung? Wann sollte ich einen lieber als den anderen benutzen? Warum wurde so ein Weg geschaffen, während die normalen Zahnspangen die Aufgabe erfüllten?

+1

Zusätzlich zu den Antworten, die Sie erhalten, Test {} ist. Nicht gleichbedeutend mit test(). Test hat einen Parameter (Tabelle) und die Übergabe von mehr als einem Argument ignoriert den Rest stillschweigend, während {} eine Tabelle als einzelnes Objekt erstellt, das alle Werte enthält. Also, teste {1,2,3 } ist nicht dasselbe wie Test (1,2,3). – tonypdmtr

Antwort

3

Lua stellt zwei syntaktische Zucker für Funktionsargumente zur Verfügung. Ihr Zweck ist nur Bequemlichkeit.

Sie können wählen, was Sie (und Ihre Kollegen) in Bezug auf Bequemlichkeit, Lesbarkeit und Software-Design bevorzugen. Leistungsmäßig gibt es keinen Unterschied.

Wenn Ihr einziges Argument eine einzelne literale Zeichenfolge oder eine einzelne neue Tabelle (Tabellenkonstruktor!) Ist, können Sie die Klammern weglassen.

Aus dem Lua-Referenzhandbuch:

2.5.8 – Function Calls

Argumente haben die folgende Syntax:

args ::= `(´ [explist] `)´ 
args ::= tableconstructor 
args ::= String 

Alle Argumente Ausdrücke vor dem Aufruf ausgewertet werden. Ein Aufruf der Form f{fields} ist syntaktischer Zucker für f({fields}); Das heißt, die Argumentliste ist eine einzelne neue Tabelle. Ein Aufruf des Formulars f'string' (oder f"string" oder f[[string]]) ist syntaktischer Zucker für f('string'), das heißt, die Argumentliste eine einzelne Zeichenkette ist

Verwandte Themen