2010-06-17 68 views
0

如何覆盖luabind类__finalize方法?如何覆盖luabind类__finalize方法?

试图做这样的方式:

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') 

但仍卢阿只调用原有的终结。它确实适用于__init方法,但是:

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

另外我试过重写getmetatable(A).__ finilize。也没有帮助。

我该如何重写它?提前致谢。

回答

1

只是一个猜测,但确实只是去__gc

否则尝试遍历元表,试图找出luabind做:for k , v in getmetatable(myobject) do print(k,v) end

+0

不知道。在__gc之前调用__finalize。我试图覆盖它,但遇到了崩溃。来自lua的参考:“__gc ...(只能从C侧设置)”。 * Metatable for class:* __index,__newindex,__luabind_classrep(true),__gc,__call。 * 1,__eq,__mul,__pow,__index,__call,__unm,__concat,__len,__newindex,__lt,__div,__tostring,__luabind_class(true),__gc,__le,__sub,__add – kFk 2010-06-21 08:59:45