2017-07-15 1 views
0

J'ai récemment vu une nouvelle méthode, au moins pour moi, pour appeler des fonctions dans Lua et c'est en utilisant les accolades {}, certainement si le paramètre était une table. Prenez cette fonction comme un exemple de ce que je veux examiner:Quelle est la différence entre {} et() lors de l'appel d'une fonction?

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

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

En appelant la fonction test(), nous avons utilisé les accolades « {} » au lieu des accolades normales «() ».

Alors, mes questions vont, quelle est la différence entre ces deux? Quel est le meilleur en performance? Quand devrais-je en utiliser un plutôt que l'autre? Pourquoi une telle manière a-t-elle été créée alors que les accolades normales faisaient le travail?

+1

En plus des réponses que vous avez obtenu, le test {} est. pas équivalent à test(). Test a un paramètre (table) et en passant plus d'un argument ignore silencieusement le reste, tandis que {} crée une table en tant qu'objet unique qui contient toutes les valeurs. } n'est pas la même chose que test (1,2,3). – tonypdmtr

Répondre

3

Lua fournit deux sucres syntaxiques pour les arguments de fonction. Leur but est la commodité seulement.

Vous pouvez choisir ce que vous (et vos collègues) préférez en termes de commodité, de lisibilité et de conception de votre logiciel. En termes de performances, il n'y a pas de différence.

Si votre seul argument est une chaîne littérale unique ou une nouvelle table unique (constructeur de table!), Vous pouvez omettre la parenthèse.

Dans le manuel de référence Lua:

2.5.8 – Function Calls

Arguments ont la syntaxe suivante:

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

Toutes les expressions d'argument sont évalués avant l'appel. Un appel de la forme f{fields} est un sucre syntaxique pour f({fields}); c'est-à-dire, la liste d'arguments est une seule nouvelle table. Un appel de la forme f'string' (ou f"string" ou f[[string]]) est le sucre syntaxique pour f('string'), c'est la liste des arguments est une chaîne de caractères unique