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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top