Question

Je me demandais s'il y a un moyen de faire un fichier lua qu'une seule fois et que toutes les tentatives ultérieures pour faire ce fichier lua entraînera une non-op.

Je l'ai déjà pensé à faire quelque chose de semblable à # de tête C ++ if / else / endif trick. Je me demande s'il y a un moyen standard pour mettre en œuvre.

James

Était-ce utile?

La solution

bien, require fait à peu près cela.

require "file" -- runs "file.lua"
require "file" -- does not run the "file" again

Autres conseils

Le seul problème avec besoin est que cela fonctionne sur les noms de modules, fichier non noms. En particulier, nécessitent ne gère pas les noms avec des chemins (bien qu'il n'utilise package.path et package.cpath pour localiser les modules dans le système de fichiers).

Si vous voulez gérer les noms avec des chemins, vous pouvez écrire un wrapper simple à dofile comme suit:

do
  local cache={}
  local olddofile=dofile
  function dofile(x)
    if cache[x]==nil then
      olddofile(x)
      cache[x]=true
   end 
  end
end

basée sur la réponse de lhf, mais en utilisant package, vous pouvez également faire une fois:

package.preload["something"]=dofile "/path/to/your/file.lua"

puis utilisez:

local x=require "something"

pour obtenir à nouveau le paquet pré-chargé. mais c'est un peu violent ...

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