Agregue un método a UserData
-
28-10-2019 - |
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?
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