Получить бесконечный цикл с помощью method_added и инициализировать вместе

#ruby

#ruby

Вопрос:

Я хочу подключить некоторые действия во всех методах объекта, но моя попытка, похоже, попадает в бесконечный цикл.

Как только я закомментирую 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
 

Комментарии:

1. можете ли вы показать, как вы вызывали метод, который приводил к бесконечному циклу ?

2. @ArupRakshit ПРИВЕТ, я ОБНОВИЛ ЕГО

Ответ №1:

Поскольку initialize это частный метод, попробуйте это:

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