Einstellung: Ich verwende Lua aus einer C / C ++ Umgebung.
Ich habe mehrere Lua-Dateien auf der Festplatte. Diese werden in den Speicher eingelesen und einige weitere Nur-Speicher-Lua-Dateien werden zur Laufzeit verfügbar. Denke z.B. eines Editors, mit zusätzlichen nicht gespeicherten Lua-Dateien.
Also, ich habe eine list<identifier, lua_file_content>
im Speicher. Einige dieser Dateien enthalten require
-Anweisungen. Wenn ich versuche, alle diese Dateien in eine Lua-Instanz zu laden (momentan über lua_dostring
) bekomme ich attempt to call global require (a nil value)
.
Gibt es eine Möglichkeit, eine require
-Funktion bereitzustellen, die die alte ersetzt und nur die im Speicher vorhandenen Dateien verwendet (diese Dateien sind auf der C-Seite)?
Gibt es eine andere Möglichkeit, require
in diesen Dateien zuzulassen, ohne die erforderlichen Dateien auf der Festplatte zu haben?
Ein Beispiel wäre, die lua stdlib nur aus dem Speicher zu laden, ohne sie zu verändern. (Dies ist eigentlich mein Testfall.)
Anstatt require
zu ersetzen, fügen Sie eine Funktion zu package.loaders
hinzu? Der Code ist fast derselbe.
Eine ziemlich einfache C ++ - Funktion, die require
nachahmen könnte, könnte sein: (Pseudocode)
Zeige diese Funktion Lua als require
und du kannst loslegen.
Ich möchte auch hinzufügen, dass, um das Verhalten von require
vollständig nachzuahmen, Sie wahrscheinlich auf package.loaded
achten müssen, um zu vermeiden, dass der Code zweimal geladen wird.
Es gibt keine package.loaders in lua 5.2
Es rief jetzt package.searchers auf.
Tags und Links lua