Делайте файл только один раз в Lua
Вопрос
Мне было интересно, есть ли способ сделать файл 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"
Чтобы снова получить предварительно загруженный пакет. Но это немного оскорбительно ...