gpt4 book ai didi

ruby - 使用 method_added 获得一个无限循环并一起初始化

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:15 25 4
gpt4 key购买 nike

我想在对象的所有方法中 Hook 一些 Action ,但我的尝试似乎陷入了无限循环。

一旦我注释掉 initialize 问题就解决了。

我该如何解决这个问题?

我以这种方式调用对象TaskRecord.new,然后引发类似stack overflow的消息

class TaskRecord
@@cnt = 0
#To add log when calls a method
def self.method_added(name)
if /hook/.match(name.to_s) or method_defined?("#{name}_without_hook")
return
end
class_eval do
alias_method "#{name}_without_hook" , "#{name}"
define_method name do
p "#{name} called"
send "#{name}_without_hook"
end
end
end

def initialize
...
end

def somemethods
...
end

最佳答案

因为 initialize 是一个私有(private)方法,试试这个:

class Test
def initialize
end
alias_method :old_initialize, :intialize
end

Test.method_defined? 'initialize' # returns false
Test.method_defined? 'old_initialize' # returns false too

您可以使用 private_method_defined? 修复您的代码

if /hook/.match(name.to_s) or
method_defined?("#{name}_without_hook") or
private_method_defined?("#{name}_without_hook")

关于ruby - 使用 method_added 获得一个无限循环并一起初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com