Il existe deux types de tables dans Lua, tableaux et dictionnaires, ce sont ce que vous appelez des « listes » et « documents ». Un tableau, contient des valeurs dans un ordre, cela vous donne quelques avantages, comme une itération plus rapide ou l'insertion/suppression de valeurs. Dictionnaires fonctionnent comme une table de recherche géante, il n'a pas d'ordre, ses avantages sont de savoir comment vous pouvez utiliser n'importe quelle valeur comme une clé, et vous n'êtes pas aussi restreint. Lorsque vous construisez une table, vous avez 2 syntaxes, vous pouvez séparer les valeurs par des virgules, par ex. {2,4,6,8}
créant ainsi un tableau avec les touches 1 à n, ou vous pouvez définir des paires clé-valeur, par ex. {[1]=2,[58]=4,[368]=6,[48983]=8}
créer un dictionnaire, vous pouvez souvent mélanger ces syntaxes et vous ne rencontrerez aucun problème, mais ce n'est pas le cas dans votre scénario.
Ce que vous faites est de définir la même clé deux fois pendant la construction initiale de la table. Ceci est le plus souvent impraticable et en tant que tel n'a pas vraiment eu de pensée sérieuse dans le développement de la langue. Cela signifie que ce qui se passe est essentiellement comportement non spécifié. Il n'est pas complètement compris quel effet cela aura, et peut être incohérent entre différentes plates-formes ou implémentations. En tant que tel, vous ne devriez pas l'utiliser dans des projets commerciaux, ou tout code que vous partagerez avec d'autres personnes. En cas de doute, construisez une table vide et définissez les paires clé-valeur par la suite.
Le résultat de 'a = {1, [2] = 2, [1] = 3}' n'est pas spécifié. Les vrais résultats seront différents sur PUC Lua et sur LuaJIT. N'utilisez pas ce code dans la production. –
@EgorSkriptunoff Alors devrait être le résultat de 'a = {[1] = 1, [2] = 2, 3}'? – ibrahim5253
[UB] (https://fr.wikipedia.org/wiki/Unspecified_behavior) –