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

È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top