Добавить метод в userdata - PullRequest
2 голосов
/ 15 июня 2011

Я пытаюсь добавить метод к существующим данным пользователя, как это, но в этой игре я ошибаюсь.

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 Ответ

5 голосов
/ 15 июня 2011

Второй опубликованный вами метод будет работать, если в пользовательских данных уже есть метатаблица с таблицей, назначенной полю __index.Из соображений безопасности метатабельный объект нельзя присвоить пользовательским данным из Lua.Таким образом, вы должны присвоить userdata метатабельный из вашего кода привязки 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
}
...