Aggiungi un metodo a UserData
-
28-10-2019 - |
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
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