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

Était-ce utile?

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
scroll top