Si des accolades ('{' et '}') sont utilisées dans Lua, à quoi servent-elles?Les accolades sont-elles utilisées dans Lua?
Répondre
Tableau littéraux.
La table est le type central dans Lua, et peut être traitée comme un tableau associatif (table de hachage ou dictionnaire) ou comme un tableau ordinaire. Les clés peuvent être des valeurs de tout type Lua sauf nil
, et les éléments d'une table peuvent contenir n'importe quelle valeur sauf nil
.
L'accès des membres de groupe est plus efficace que l'accès par clé de hachage dans les coulisses, mais les détails n'ont généralement pas d'importance. Cela rend la manipulation des tableaux clairsemés maniable puisque le stockage n'a besoin d'être alloué que pour les cellules qui contiennent une valeur.
Ceci conduit à un idiome de matrice universel basé sur 1 qui semble un peu étrange pour un programmeur C.
Par exemple
a = { 1, 2, 3 }
crée un tableau stocké dans la variable a
avec trois éléments (par coïncidence) possèdent les mêmes valeurs que leurs indices. Du fait que les éléments sont stockés à des indices séquentiels commençant par 1, la longueur de a
(donnée par #a
ou table.getn(a)
) est 3.
Initialisation d'une table avec des touches non entières peut être fait comme suit:
b = { one=1, pi=3.14, ["half pi"]=1.57, [function() return 17 end]=42 }
où b
aura des entrées nommées "un", "pi", "demi pi", et une fonction anonyme. Bien sûr, rechercher ce dernier élément sans itération de la table peut être délicat à moins qu'une copie de cette même fonction soit stockée dans une autre variable.
Un autre endroit où les accolades apparaissent est vraiment la même signification sémantique, mais il est caché (pour un nouvel utilisateur de Lua) derrière du sucre syntaxique. Il est courant d'écrire des fonctions qui prennent un seul argument qui devrait être une table. Dans ce cas, l'appel de la fonction ne nécessite pas l'utilisation de parenthèses. Il en résulte un code qui semble contenir un mélange de ()
et de {}
, tous deux apparemment utilisés comme opérateur d'appel de fonction.
btn = iup.button{title="ok"}
est équivalent à
btn = iup.button({title="ok"})
mais est aussi moins dur sur les yeux. Incidemment, l'appel d'une fonction à un seul argument avec une valeur littérale fonctionne également pour les littéraux de chaîne.
constructeur liste/ditionnaire (c'est-à-dire constructeur de type table).
Ils ne sont pas utilisés pour les blocs de code si c'est ce que vous voulez dire. Pour cela, Lua utilise juste le mot-clé end pour terminer le bloc.
Ah, c'est vrai, je me sens bête maintenant. – Sydius
Il n'y a pas de listes ou de dictionnaires dans Lua, mais un type "table" qui sert les deux. Les accolades sont donc utilisées comme constructeur de table. –
@Alexander Gladysh: Merci, j'ai ajusté ma réponse. –
Ils sont utilisés pour les littéraux de table que vous utiliseriez dans C:
t = {'a', 'b', 'c'}
C'est le seul cas commun. Ils ne sont pas utilisés pour les délimiteurs de bloc.Dans une table Lua, vous pouvez mettre les valeurs de différents types:
t={"foo", 'b', 3}
Vous pouvez également les utiliser comme les dictionnaires, à la Python:
t={name="foo", age=32}
- 1. Où les instructions utilisées dans SQL
- 2. Entrée asynchrone dans Lua
- 3. Accolades liées dans Visual Studio 2008
- 4. Rechercher les clés étrangères utilisées
- 5. Obtenez les applications les plus fréquemment utilisées dans VB.NET
- 6. Contour C#. accolades ou régions
- 7. expansion des accolades Tricky shell
- 8. Génération sécurisée XML dans Lua
- 9. Concaténation de chaînes dans Lua
- 10. bibliothèques c couramment utilisées pour les applications?
- 11. Agrégation UML lorsque les interfaces sont utilisées
- 12. rebol: Comment créer une règle pour analyser les accolades?
- 13. Commandes Ajax les plus fréquemment utilisées
- 14. Méthodes de simulation utilisées dans les méthodes statiques
- 15. Énumérer les tables utilisées dans la requête mysql?
- 16. Débogage intégré Lua
- 17. Incorporation: mono vs lua
- 18. Lua scripting implementation
- 19. Constructeur de tables lua
- 20. Récupère la sortie de os.execute dans Lua
- 21. Ne fichier qu'une seule fois dans Lua
- 22. Lua et C-struct
- 23. Polices utilisées dans l'interface graphique intégrée
- 24. Correction d'un code XML incorrect dans Lua
- 25. Obtenir des entrées avec IUP dans Lua
- 26. Lua pour Windows
- 27. formes changeantes utilisées pour scale_shape() dans ggplot2
- 28. expression régulière pour le contenu entre accolades
- 29. Rechercher un élément dans une liste Lua
- 30. Lua - Erreur de syntaxe dans if-instruction
J'étais curieux d'ajouter un simple, préprocesseur de les remplacer par le "do/then" et "end" pour le rendre un peu moins verbeux. – Sydius
Jetez un oeil aux filtres de jetons et metalua, tous deux référencés fréquemment dans la liste de diffusion Lua-L disponible sur www.lua.org. Les deux offrent des moyens de modifier la langue au niveau de l'arbre de la syntaxe abstraite, et pourraient être en mesure de le faire. Un préprocesseur devrait faire beaucoup d'analyse pour bien faire les choses. – RBerteig