Pregunta

Estoy tratando de agregar un método a un dispositivo de usuario existente como este, sin embargo, esto me da un error.

local userData = luajava.newInstance("Objects.Block") --creates a userdata from a Java class
userData.newMethod = function()
        -- Do stuff
end

Encontré este ejemplo en un sitio pero tampoco funciona

local userData = luajava.newInstance("Objects.Block")
local mt = getmetatable(userData)
mt.__index.newMethod = function()
        -- Do stuff
end

¿Existe una forma funcional de agregar un método/función a un Data de usuario existente de LUA?

¿Fue útil?

Solución

El segundo método que publicó funcionará si el usuario de user ya tiene un metateable con una tabla asignada al campo __Index. No se puede asignar un metatible a un Data de usuario de LUA por razones de seguridad. Por lo tanto, debe asignar a los datos de usuarios un metatible de su código de enlace Java.

lua_newuserdata(L, SOME_SIZE);
luaL_newmetatable(L, "userData.mt");
lua_setmetatable(L, -2);

Si el metatible no tiene una tabla __dex, cree una.

local mt = getmetatable(userData)
mt.__index = {
    newMethod = function()
        print('It works!')
    end
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top