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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top