Lua 'require' aber Dateien sind nur im Speicher

8

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

    
Mike M 23.09.2013, 17:38
quelle

3 Antworten

8

Anstatt require zu ersetzen, fügen Sie eine Funktion zu package.loaders hinzu? Der Code ist fast derselbe.

%Vor%

Ссылка

    
Colonel Thirty Two 24.09.2013, 13:53
quelle
5

Eine ziemlich einfache C ++ - Funktion, die require nachahmen könnte, könnte sein: (Pseudocode)

%Vor%

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.

    
Bartek Banachewicz 23.09.2013 17:45
quelle
1

Es gibt keine package.loaders in lua 5.2
Es rief jetzt package.searchers auf.

%Vor%     
ToyAuthor X 18.04.2016 12:00
quelle

Tags und Links