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.

lua
1
SudoGaron 4 nov. 2019 à 03:17

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])
3
Vlad 4 nov. 2019 à 07:59