Добавить метод в userdata
Я пытаюсь добавить метод к существующим данным пользователя, как это, но в этой игре я ошибся.
local userData = luajava.newInstance("Objects.Block") --creates a userdata from a Java class
userData.newMethod = function()
-- Do stuff
end
Я нашел этот пример на сайте, но он тоже не работает
local userData = luajava.newInstance("Objects.Block")
local mt = getmetatable(userData)
mt.__index.newMethod = function()
-- Do stuff
end
Есть ли рабочий способ добавить метод / функцию в существующие пользовательские данные из Lua
1 ответ
Решение
Второй метод, который вы опубликовали, будет работать, если у пользовательских данных уже есть метатаблица с таблицей, назначенной полю __index. Из соображений безопасности метатабельный объект нельзя присвоить пользовательским данным из Lua. Таким образом, вы должны назначить метаданные пользовательских данных из вашего кода привязки Java.
lua_newuserdata(L, SOME_SIZE);
luaL_newmetatable(L, "userData.mt");
lua_setmetatable(L, -2);
Если у метатаблицы еще нет таблицы __index, создайте ее.
local mt = getmetatable(userData)
mt.__index = {
newMethod = function()
print('It works!')
end
}