Non depositare solo una volta in Lua
Domanda
Mi chiedevo se c'è un modo per fare un file lua solo una volta e hanno tutti i tentativi successivi da fare quel file lua si tradurrà in un no-op.
Ho già pensato di fare qualcosa di simile a C ++ # di intestazione if / else / endif trucco. Mi chiedo se c'è un modo standard per implementare questo.
James
Soluzione
bene, require
praticamente fa quello.
require "file" -- runs "file.lua"
require "file" -- does not run the "file" again
Altri suggerimenti
L'unico problema richiede è che funziona su nomi di modulo, non i nomi dei file. In particolare, richiedono non gestisce i nomi con i percorsi (anche se fa uso di package.path e package.cpath per individuare i moduli nel file system).
Se si desidera gestire i nomi con i percorsi è possibile scrivere un semplice wrapper per dofile nel seguente modo:
do
local cache={}
local olddofile=dofile
function dofile(x)
if cache[x]==nil then
olddofile(x)
cache[x]=true
end
end
end
in base alla risposta del LHF, ma utilizzando package
, si può anche fare una volta:
package.preload["something"]=dofile "/path/to/your/file.lua"
e quindi utilizzare:
local x=require "something"
per ottenere nuovamente il pacchetto precaricato. ma questo è un po 'abusiva ...