我一直在加载 java 函数,以便可以使用 luaj 从 lua 文件中调用它。
我目前所做的是创建这样的东西:
在 some_package/aif.java :
package some_package;
public class aif extends TwoArgFunction {
public aif() {
}
@Override
public LuaValue call(LuaValue modname, LuaValue env) {
LuaValue library = tableOf();
library.set("foo", new foo());
env.set("aif", library);
return library;
}
//the rest contains the implementations of java functions
}
然后在lua文件中:
require "some_package/aif"
--etc ...
然后在 Main.java 文件中:
public static void Main(String[] args) {
String script = "lib/some_lua_file.lua";
globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.loadFile(script);
chunk.call( LuaValue.valueOf(script) );
}
这段代码有效,但我想要的是在 lua 文件中我们不必使用“require”。我已经类似地实现了这一点,但在 c++ 中使用这一行:
luaL_requiref(L, "aif", luaopen_aiflib, 1);
我们可以在 luaj 中这样做吗?我试过了 :
globals.load(new aif());
但在线程“main”org.luaj.vm2.LuaError 中出现异常:预期索引,得到 nil(aif 类的调用函数中的变量 env 为 nil)
有人知道如何将 aif 设置为 lua 库以与 luaj 一起使用吗?