Описание
Я делаю программу LuaJ, и вот такой скрипт lib:
function foo()
print("foo");
end
Я хочу, чтобы функция foo
могла вызываться в других сценариях напрямую (без require
), но выполнялась неизменной в разных сценариях. (Даже скрипт переопределяет его, он работает так же, как и в других скриптах.)
Например, вот сценарий 1:
foo = function()
print("bar");
end
а вот скрипт 2:
foo();
Что сделано
Я видел эти два вопроса. Они работают, но не решают эту проблему.
LuaJ Как избежать переопределения существующих записей в таблице Globals а>
Предотвращение переопределения функций в таблице Lua
Предоставление доступа только к глобальной среде (Lua)
Я пытался загружать lib каждый раз, когда запускал скрипт или устанавливал local _ENV
, но из-за того, что могут быть дополнительные обратные вызовы с Java на Lua, это не работает правильно.
Теперь я справляюсь с этим, создавая Globals
и загружая скрипт lib каждый раз, когда загружаю скрипт на Java следующим образом:
public static void main(String[] args) {
loadAndCallViaDifferentEnv(libPath, script1);
loadAndCallViaDifferentEnv(libPath, script2);
}
static void loadAndCallViaDifferentEnv(String libPath, String scriptPath) {
Globals globals = JsePlatform.standardGlobals();
globals.loadfile(libPath).call();
globals.loadfile(scriptPath).call();
}
Работает хорошо, но стоит дорого. Есть ли способ лучше?