1

由于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作为实例方法运行?

4

1 回答 1

2

访问成员函数时(通常在 Lua 对象中,而不仅仅是 luaj),您必须this手动提供参数作为第一个参数,如下所示:

callbackStore.test(callbackStore,"test")

或者,您可以对同一事物使用速记符号:

callbackStore:test("test")

于 2014-08-11T08:56:39.507 回答