Как открыть java-объект для LuaJ

Недавно я начал изучать Lua, потому что мне нужно использовать его в приложении Java, над которым я работаю. Для этого я использую LuaJ. Я искал в Интернете и узнал, как вы можете открыть метод Java для LuaJ, но я не могу узнать, как открыть (предоставить доступ LuaJ) объект Java. Я видел еще один пост об открытии объектов С# для Lua, и ответ был таким:

Общий метод совместного использования объектов между Lua и любым приложением на любом языке заключается в определении метаметодов __index() и __newindex() (и, возможно, других) для userdata...

Может ли кто-нибудь объяснить мне, как сделать то, что описано здесь, или объяснить другой способ выставления объектов, чтобы я мог в основном сделать что-то вроде этого:

//In Java.
exposeObject(myObject, "nameOfMyObject");

--Then in Lua
nameOfMyObject:myFunction();

person Charanor    schedule 23.07.2016    source источник


Ответы (1)


Вы можете проверить класс "CoerceJavaToLua". Он содержит метод под названием «coerce()», который берет объект и создает представление объекта LuaValue, которое вы затем можете добавить к своим глобальным переменным. Например:

Джава:

LuaValue luaObject = CoerceJavaToLua.coerce(myObject);
globals.set("nameOfMyObject", luaObject);

Луа:

nameOfMyObject:someFunction()

"globals" должен быть вашим экземпляром Globals, который вы создали ранее. Сделайте это перед загрузкой файла или загрузкой из строки.

Если вы хотите больше вручную, LuaJ предлагает способ получить LuaValue любого объекта Java из lua:

local obj = luajava.newinstance("your.package.YourClass", "argument1", 2)

Для доступа к статическим полям или использования Enums используйте bindClass вместо newInstance, bindClass не принимает никаких аргументов, кроме имени пакета и класса.

Для получения дополнительной информации проверьте:

http://www.luaj.org/luaj/3.0/README.html#5

и

http://www.luaj.org/luaj/3.0/README.html#luajava

person D3_JMultiply    schedule 23.08.2016