Machen Sie nur einmal in Lua Datei
Frage
Ich habe mich gefragt, ob es eine Möglichkeit gibt, nur einmal eine Lua-Datei zu erstellen, und nachfolgenden Versuchen, diese Lua-Datei zu machen, führt zu einem No-Op.
Ich habe bereits darüber nachgedacht, etwas wie C ++ - Headers #if/sonst/endif -Trick zu tun. Ich frage mich, ob es eine Standardmethode gibt, um dies zu implementieren.
James
Lösung
Gut, require
Das macht das so ziemlich.
require "file" -- runs "file.lua"
require "file" -- does not run the "file" again
Andere Tipps
Das einzige Problem mit dem Erfordernis ist, dass es auf Modulnamen und nicht auf Dateinamen funktioniert. Insbesondere verwendete Anforderung keine Namen mit Pfaden (obwohl es Paket und Paket und Paket verwendet, um Module im Dateisystem zu lokalisieren).
Wenn Sie Namen mit Pfaden verarbeiten möchten, können Sie wie folgt einen einfachen Wrapper schreiben:
do
local cache={}
local olddofile=dofile
function dofile(x)
if cache[x]==nil then
olddofile(x)
cache[x]=true
end
end
end
Basierend auf der Antwort von LHF, aber nutzend package
, Sie können dies auch einmal tun:
package.preload["something"]=dofile "/path/to/your/file.lua"
und dann verwenden:
local x=require "something"
Um das vorinstallierte Paket erneut zu erhalten. Aber das ist ein bisschen missbräuchlich ...