2010-06-17 16 views
0

Comment remplacer la classe luabind __finaliser la méthode?Comment remplacer la méthode __finalize de la classe luabind?

Essayer de faire de telle manière:

class A 
function A:__init() 
end 
function A:__finalize() 
end 

local original_finalize_function = A.__finalize 
A.__finalize = function(...) 
    -- some custom logic 
    if original_finalize_function then 
    original_finalize_function(unpack(arg)) 
    end 
end 

local a = A  
a = nil 

collectgarbage('collect') 

Mais Lua appelle encore que finaliseur d'origine. Il fonctionne pour la méthode __init cependant:

local original_init_function = A.__init 
A.__init = function(...) 
if original_init_function then 
    original_init_function(unpack(arg)) 
end 
end 

Aussi j'ai essayé de passer outre getmetatable (A) .__ finilize. Ça n'aide pas trop.

Comment puis-je le remplacer? Merci d'avance.

Répondre

1

Juste une supposition, mais ne finalisent il suffit d'aller à __gc?

Sinon, essayez itérer sur le métatable pour essayer de savoir ce que luabind fait: for k , v in getmetatable(myobject) do print(k,v) end

+0

Je ne sais pas. __finalize est appelée avant __gc. J'ai essayé de passer outre, mais j'ai eu un accident. De la référence de LUA: "__gc ... (peut être réglé du côté C seulement)." * Composable pour la classe: * __index, __newindex, __luabind_classrep (true), __gc, __call. * Composable pour l'objet (instance de classe): * 1, __eq, __mul, __pow, __index, __call, __unm, __concat, __len, __newindex, __lt, __div, __tostring, __luabind_class (vrai), __gc, __le, __sub, __add – kFk

Questions connexes