Domanda

Sto cercando di aggiungere un metodo a un utente esistente come questo, questo tuttavia mi gioca un errore.

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

Ho trovato questo esempio su un sito ma non funziona neanche

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

Esiste un modo funzionante per aggiungere un metodo/funzione a un utente esistente da LUA

È stato utile?

Soluzione

Il secondo metodo che hai pubblicato funzionerà se l'utente ha già un metautibile con una tabella assegnata al campo __index. Un metatabile non può essere assegnato a un UserData da LUA per motivi di sicurezza. Pertanto, è necessario assegnare a UserData un metautibile dal tuo codice di associazione Java.

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

Se il metatabile non ha già una tabella __index, crea una.

local mt = getmetatable(userData)
mt.__index = {
    newMethod = function()
        print('It works!')
    end
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top