Как использовать метод экземпляра, определенный Java, в Lua?

Я знаю, что в Lua можно использовать статические методы, определенные Java, благодаря разделу «Библиотеки функций Java» на http://luaj.org/luaj/README.html.

Однако я изо всех сил пытаюсь выяснить, как я могу использовать те же методы, например, у меня есть сокращенный пример:

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 в качестве метода экземпляра?


person skiwi    schedule 09.08.2014    source источник


Ответы (1)


При доступе к функциям-членам (в объектах Lua вообще, а не только в luaj) вы должны указать аргумент this вручную в качестве первого аргумента, например:

callbackStore.test(callbackStore,"test")

Или вы можете использовать сокращенную запись для того же самого:

callbackStore:test("test")

person mtsvetkov    schedule 11.08.2014
comment
Не могли бы вы уточнить подробнее и получить рабочий пример? - person skiwi; 11.08.2014
comment
Извините, я ушел на обед. Просматривая вопрос еще раз, я заметил еще кое-что - вы должны вызывать test как callbackStore:test("test") - оператор : является сокращением для callbackStore.test(callbackStore,"test"), так что это может быть вашей проблемой. - person mtsvetkov; 11.08.2014
comment
Я попробую это позже, когда у меня будет время... Так как мне также нужно будет перестроить часть рассматриваемого кода. - person skiwi; 11.08.2014
comment
Большое спасибо! Теперь он работает с нотацией :-ООП, не могли бы вы изменить свой ответ на то, что вы примерно сказали в комментарии, чтобы я мог его принять? - person skiwi; 11.08.2014