Вопрос

Мне было интересно, есть ли способ сделать файл LUA только один раз и иметь какие-либо последующие попытки сделать этот файл LUA, приведет к нето.

Я уже думал о том, чтобы сделать что -то похожее на трюк C ++ Header #if/else/endif. Мне интересно, есть ли стандартный способ реализовать это.

Джеймс

Это было полезно?

Решение

Что ж, require В значительной степени это делает.

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

Другие советы

Единственная проблема с требованием заключается в том, что он работает на именах модулей, а не имена файлов. В частности, require не обрабатывает имена с помощью путей (хотя он использует package.path и package.cpath для поиска модулей в файловой системе).

Если вы хотите обрабатывать имена с путями, вы можете написать простую обертку в DoFile следующим образом:

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

на основе ответа LHF, но используя package, вы также можете сделать это один раз:

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

а затем используйте:

local x=require "something"

Чтобы снова получить предварительно загруженный пакет. Но это немного оскорбительно ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top