【问题标题】:How to override luabind class __finalize method?如何覆盖 luabind 类 __finalize 方法?
【发布时间】:2011-03-05 04:15:34
【问题描述】:

如何重写 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')

但 lua 仍然只调用原始终结器。但是它确实适用于 __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。也没用。

如何覆盖它?提前致谢。

【问题讨论】:

    标签: class scripting lua luabind


    【解决方案1】:

    只是猜测,但最终确定只是转到__gc

    否则尝试迭代元表以尝试找出 luabind 正在做什么:for k , v in getmetatable(myobject) do print(k,v) end

    【讨论】:

    • 不知道。 __finalize 在 __gc 之前调用。我试图覆盖它,但发生了崩溃。来自 lua 参考:“__gc ...(只能从 C 端设置)。” 类的元表: __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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2021-01-14
    • 2014-03-17
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多