gpt4 book ai didi

java - 加载java库函数到Luaj

转载 作者:行者123 更新时间:2023-12-02 14:43:38 26 4
gpt4 key购买 nike

我一直在加载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 一起使用吗?

最佳答案

您可以像下面这样编写 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");
}
}

然后将其添加到您的 LUA 中,如下所示:

LuaValue globals = JsePlatform.standardGlobals();
globals.get("dofile").call( LuaValue.valueOf(yourScriptfile));
globals.set("callMyFunction", new MyZeroArgImpl());

现在,即使没有 require('...'),您也可以在 LUA 脚本中调用函数:

print(callMyFunction())

关于java - 加载java库函数到Luaj,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16102578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com