LUA Initialisation des tables
-
14-11-2019 - |
Question
Dans Lua, quand j'ai créé une table à la manière suivante ...
test={}
test = { x=5 , y = test.x}
print(test.y)
Je m'attendais à ce que ce test soit 5, ce n'est pas le cas. Pourquoi?
La solution
De Programmation dans Lua, 2nd éd., page 23, chapitre 3.6 Constructeurs de table:
... c'est-à-dire que toutes les tables sont créées égales; Les constructeurs affectent uniquement leur initialisation. Chaque fois que Lua évalue un constructeur, il crée et initialise une nouvelle table. ...
Donc, le constructeur de table { x=5 , y = test.x }
Crée d'abord un nouvel objet de table, qui, après avoir été complètement évalué (!) test
.
C'est ce qui se passe plus ou moins dans votre code:
test = {}
TEMP_TABLE = { x=5 , y=test.x } --> x=5, y=nil
test = TEMP_TABLE
Autres conseils
C'est simplement parce que Test.x n'existe qu'après que la déclaration TAT a été exécutée. Donc cela fonctionnerait:
test={}
test.x=5
test.y=test.x
Alors où tu fais
test={x=5,y=test.x}
vous remplacez réellement le tableau que vous avez généré par t={}
avec un nouveau, et prenez la valeur de la clé X dans l'ancienne, qui est nulle.