2016-04-04 7 views
1

Ich benutze Lua 5.1 und ich möchte einige Dateien sandboxieren. setfenv mit loadfile scheint Arbeit, aber ich möchte require auch verwenden, weil ich Mechanismus von bereitgestellt verwenden möchte. Ich habe einige benutzerdefinierte Loader, um eine Datei zu laden, die sich nicht auf der Festplatte befindet. Ist es möglich? Oder gibt es eine alternative Lösung?setfenv mit require-Funktion in Lua

+0

Ich habe ein [Lua-Modul] (https://github.com/siffiejoe/lua-modjail) geschrieben, das alle Module so weit wie möglich voneinander isoliert. Ich benutze es nicht mehr selbst, aber vielleicht findest du es interessant ... – siffiejoe

Antwort

0

Die Lösung hier scheint ziemlich offensichtlich zu sein: Haben Sie die Datei require nicht die Datei, die das Modul implementiert. Stattdessen haben Sie die d-Datei loadfile und Sandbox das eigentliche Modul. Es kann dann dieses Modul zurückgeben.

+0

Entschuldigung, ich verstehe es nicht, wie funktioniert diese Lösung? Um das aktuelle Modul zu laden, muss die 'requeste'd Datei' require' erneut aufrufen. Wie auch immer, ich möchte die Module davon abhalten, Sandkästen zu sein. – Noverull

+0

@Noverull: Deshalb habe ich gesagt, dass Sie das eigentliche Modul "laden". Du benutzt 'require' nicht darauf; Sie verwenden 'loadfile' darauf. Module sind nicht besonders; Sie sind nur Lua-Skripte. –

+0

Es bricht die Verwendung von 'require'. Ich habe einige Dateien, die nicht von 'loadfile' geladen werden können. – Noverull