Pregunta

Me preguntaba si hay una manera de hacer un archivo lua sólo una vez y tener cualquier intento posterior que hacer ese archivo lua dará lugar a un no-op.

Ya he pensado en hacer algo similar a C ++ # de cabecera if / else / endif truco. Me pregunto si hay una forma estándar para implementar esto.

James

¿Fue útil?

Solución

así, require más o menos lo hace.

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

Otros consejos

El único problema con requerir es que funciona sobre los nombres de los módulos, no los nombres de archivo. En particular, requieren no maneja nombres con rutas (a pesar de que hace uso de package.path y package.cpath para localizar los módulos en el sistema de archivos).

Si desea manejar nombres con caminos que puede escribir un envoltorio sencillo de dofile de la siguiente manera:

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

basa en la respuesta de la ICI, pero utilizando package, también se puede hacer esto una vez:

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

y luego usar:

local x=require "something"

para obtener el paquete precargado de nuevo. pero eso es un poco abusiva ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top