Ajouter une méthode pour userdata
-
28-10-2019 - |
Question
Je suis en train d'ajouter une méthode à un userdata existant comme ça, cela me jeu cependant une erreur.
local userData = luajava.newInstance("Objects.Block") --creates a userdata from a Java class
userData.newMethod = function()
-- Do stuff
end
J'ai trouvé cet exemple sur un site, mais il ne fonctionne pas non plus
local userData = luajava.newInstance("Objects.Block")
local mt = getmetatable(userData)
mt.__index.newMethod = function()
-- Do stuff
end
est-il un moyen de travail pour ajouter une méthode / fonction à un userdata existant de Lua
La solution
La seconde méthode fonctionnera si posté le userdata a déjà métatable avec une table affectée au champ de __index. Un métatable ne peut pas être affecté à un UserData de Lua pour des raisons de sécurité. Donc, vous devez assigner le userdata un métatable à partir de votre code de liaison Java.
lua_newuserdata(L, SOME_SIZE);
luaL_newmetatable(L, "userData.mt");
lua_setmetatable(L, -2);
Si le métatable ne possède pas déjà une table __index, puis créer un.
local mt = getmetatable(userData)
mt.__index = {
newMethod = function()
print('It works!')
end
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow