将Java函数绑定到Lua的方法?
我正在为我的Android应用程序开发一个Lua包装器,它将允许我编写Lua代码以加快开发速度。我创建了一个名为lua的静态类,其中包含newState和pushString等函数。我通过使用指向Lua_状态的指针传递long来管理Lua状态。正如你所知道的,我不需要任何使交互更容易的花哨的东西,比如重载来推送变量 现在的问题是将Java函数绑定到Lua变量。我想了几种方法,但都很难看将Java函数绑定到Lua的方法?,java,android,lua,java-native-interface,Java,Android,Lua,Java Native Interface,我正在为我的Android应用程序开发一个Lua包装器,它将允许我编写Lua代码以加快开发速度。我创建了一个名为lua的静态类,其中包含newState和pushString等函数。我通过使用指向Lua_状态的指针传递long来管理Lua状态。正如你所知道的,我不需要任何使交互更容易的花哨的东西,比如重载来推送变量 现在的问题是将Java函数绑定到Lua变量。我想了几种方法,但都很难看 不使用函数,而是将Java函数的引用作为userdatum传递给表,并让_调用元方法负责调用“函数” 修改Lu
有没有更好的办法?还是应该采用第二种方法?(我意识到第一种方法很荒谬,但它在我的脑海中显示为一种解决方案。)你可以看看我的简单项目。它包含Lua并使用Android NDK编译 因为它使用LuaJava,所以它允许使用userdata以类似于您所说的方式将Java函数绑定到Lua。下面是我如何覆盖
print
函数以将文本输出到TextView的示例:
JavaFunction print = new JavaFunction(L) {
@Override
public int execute() throws LuaException {
StringBuilder sb = new StringBuilder();
for (int i = 2; i <= L.getTop(); i++) {
int type = L.type(i);
String val = L.toString(i);
if (val == null)
val = L.typeName(type);
sb.append(val);
sb.append("\t");
}
sb.append("\n");
status.append(sb.toString());
return 0;
}
};
print.register("print");
你可以看看我的简单项目。它包含Lua并使用Android NDK编译 因为它使用LuaJava,所以它允许使用userdata以类似于您所说的方式将Java函数绑定到Lua。下面是我如何覆盖
print
函数以将文本输出到TextView的示例:
JavaFunction print = new JavaFunction(L) {
@Override
public int execute() throws LuaException {
StringBuilder sb = new StringBuilder();
for (int i = 2; i <= L.getTop(); i++) {
int type = L.type(i);
String val = L.toString(i);
if (val == null)
val = L.typeName(type);
sb.append(val);
sb.append("\t");
}
sb.append("\n");
status.append(sb.toString());
return 0;
}
};
print.register("print");
我决定使用lua_pushcclosure,因为它允许您在可以使用lua_upvalueindex宏检索的函数上“存储”任意值。我决定使用lua_pushcclosure,因为它允许您在可以使用lua_upvalueindex宏检索的函数上“存储”任意值。还有Kahlua vs LuaJava 本书中提到: 发展博客:
还有卡鲁阿对卢阿贾瓦 本书中提到: 发展博客:
不幸的是,我在这方面没有经验。我想说看看SL4A可能会有好处。他们已经在Android上安装了lua解释器,也许你可以看看他们是怎么做的,然后再为你的解释器建模?不幸的是,我在这方面没有经验。我想说看看SL4A可能会有好处。他们已经在Android上安装了lua解释器,也许你可以看看他们是如何做到的,然后再为你的解释器建模?