Ne déposer qu'une seule fois dans Lua
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
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 ...