我坚持加载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
}
Run Code Online (Sandbox Code Playgroud)
然后在lua文件中:
require "some_package/aif"
--etc ...
Run Code Online (Sandbox Code Playgroud)
然后在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) );
}
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但我想要的是在lua文件中我们不必使用"require".我已经类似地实现了这一点,但在c ++中使用这一行:
luaL_requiref(L, "aif", luaopen_aiflib, 1);
Run Code Online (Sandbox Code Playgroud)
我们可以在luaj那样做吗?我试过了 :
globals.load(new aif());
Run Code Online (Sandbox Code Playgroud)
但在线程"main"中获取异常org.luaj.vm2.LuaError:索引预期,得到nil(aif类的调用函数中的变量env为nil)
有谁知道如何设置aif作为lua libary与luaj一起使用?
小智 6
您可以编写MyXArgImpl,如下所示:
package mypackage;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.ZeroArgFunction;
public class MyZeroArgImpl extends ZeroArgFunction {
public LuaValue call() {
return valueOf("My Zero Arg Implementation");
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其添加到您的LUA,如下所示:
LuaValue globals = JsePlatform.standardGlobals();
globals.get("dofile").call( LuaValue.valueOf(yourScriptfile));
globals.set("callMyFunction", new MyZeroArgImpl());
Run Code Online (Sandbox Code Playgroud)
现在,即使没有require('...'),您也可以在LUA脚本中调用您的函数:
print(callMyFunction())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3883 次 |
| 最近记录: |