由于http://luaj.org/luaj/README.html上的“ Java函数库”部分,我知道可以在Lua中使用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));
Lua代码由
codeTextArea.getText()
返回的地方我的问题的底线是,如何使我的代码以
test
作为实例方法运行? 最佳答案
当访问成员函数时(通常在Lua对象中,而不仅仅是luaj),您必须手动提供this
参数作为第一个参数,如下所示:callbackStore.test(callbackStore,"test")
或者,您可以将速记符号用于同一件事:callbackStore:test("test")