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