我知道可以在Lua中使用Java定义的静态方法,因为http://luaj.org/luaj/README.html上的“Java函数库”一节。
但是我很难找到如何使用相同的实例方法,我在这里有一个缩短的例子:
private static class CallbackStore {
public void test(final String test) {
}
}
(我知道我也可以在这里使用静态方法,但现实生活中不可能这样做)
我正在使用以下Lua代码:
-- Always name this function "initCallbacks"
function initCallbacks(callbackStore)
callbackStore.test("test")
end
哪个不起作用,因为它期待用户数据回来,但我给它一个字符串。
我将Lua代码称为:
globals.load(new StringReader(codeTextArea.getText()), "interopTest").call();
CallbackStore callbackStore = new CallbackStore();
LuaValue initCallbacks = globals.get("initCallbacks");
initCallbacks.invoke(CoerceJavaToLua.coerce(callbackStore));
由codeTextArea.getText()
我的问题的最后一行是,如何使用test
作为实例方法运行我的代码?
答案 0 :(得分:2)
当访问成员函数时(通常在Lua对象中,而不仅仅是luaj),你必须手动提供this
参数作为第一个参数,如下所示:
callbackStore.test(callbackStore,"test")
或者,你可以使用速记符号来表示同样的事情:
callbackStore:test("test")