Добавить метод в 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
}
Другие вопросы по тегам