J'ai un fichier lua principal app.lua, et dans cette application j'ai un bouton pour "charger les données". REMARQUE: LUA 5.1 pas 5.2
Le fichier de données est également un fichier lua avec des tables.
data1 = {
{a,b,c},
{1,2,3}
}
data2 = {
{d,e,f}
}
L'objectif était de mettre ces tables à la disposition de l'application chaque fois que je choisis de charger le fichier.
J'ai essayé l'exemple du site lua
function dofile (filename)
local f = assert(loadfile(filename))
return f()
end
mais f () imprime simplement une chaîne massive. Je n'arrive pas à accéder à f.data1 [1] par exemple.
1 réponse
Le fichier que vous chargez n'est pas un tableau de données. C'est un morceau de code, une fonction anonyme exécutable. Vous exécutez ce code dans l'instruction return f()
.
Mais voyez ce que fait ce code - il ne retourne rien. Au lieu de cela, il affecte deux variables globales, data1
et data2
. Vous pouvez y accéder par exemple data1[1]
.
Vous pourriez return
les données dans le fichier en cours de chargement, de cette façon, cela ne polluerait pas l'environnement global, et ressemblerait probablement à ce que vous imaginiez:
return {
data1 = { {a,b,c}, {1,2,3} },
data2 = { d,e,f}
}
Et dans un autre fichier:
local f = assert(loadfile(filename))
my_data = f()
print(my_data.data1[1][1])
De nouvelles questions
lua
Lua est un langage de script puissant, rapide, léger et intégrable. Il est typé dynamiquement, s'exécute en interprétant le bytecode et possède un garbage collection automatique. Sa vitesse est l'une des principales raisons pour lesquelles il est largement utilisé par la communauté du machine learning. Il est souvent appelé «langage d'extension extensible».