Pour commencer, j'utilise repl.it plutôt que d'avoir Lua sur mon bureau. Cela pourrait être le problème, mais je ne peux pas en être sûr puisque je n'ai pas un accès facile à un autre interpréteur Lua.
J'ai un problème avec un programme plus important, mais le même problème se pose dans l'extrait suivant :
stuff = {}
list = {"hello"}
table.insert(stuff,list)
table.remove(list)
print(unpack(stuff[1]))
Lorsqu'il est exécuté, je m'attends à ce qu'il imprime la table décompressée trouvée à l'adresse suivante stuff[1]
qui devrait être "hello"
parce que c'est la valeur de list
quand je l'ai réglé. L'utilisation de la méthode préférée d'insertion et de suppression, vue ci-dessous, donne les mêmes résultats.
test = {}
help = {"hello"}
test[#test+1] = help
help[#help] = nil
print(unpack(test[1]))
Cependant, si je n'appelle pas la longueur mais utilise un nombre magique ou une constante, cela fonctionne parfaitement, comme dans les deux exemples ci-dessous.
what = {}
the = {"hello"}
what[1] = the
the = nil
print(unpack(what[1]))
how = {}
questionmark = {"hello"}
one = 1
what[one] = questionmark
questionmark = nil
print(unpack(what[one]))
Enfin, ce problème n'est pas présent lorsqu'on n'utilise pas de tableaux imbriqués, comme dans cet exemple :
notnested = {}
nottable = "hello"
notnested[#notnested+1] = nottable
nottable = nil
print(notnested[1])
Qu'est-ce qui se passe ici ? Est-ce que je comprends mal le timing des déclarations, est-ce que je fais quelque chose de mal, ou est-ce que repl.it/Lua est en faute ?
C'est le repl.it des cinq exemples ci-dessus : https://repl.it/@typhirz/LightsalmonDenseCodeview