Вызов методов экземпляра из блоков - PullRequest
2 голосов
/ 01 мая 2011

Я попытался реализовать класс, позволяющий его подклассам сохранять блоки методов для их последующего выполнения. Это работает, но, похоже, я поступил неправильно. Посмотрите на это:

class SuperKlass  
  def self.exec_later(&block)
    @@block_for_later = block
  end

  def exec_now
    return unless @@block_for_later
    @@block_for_later.call
  end
end

class ChildKlass < SuperKlass
  exec_later do
    child_method
  end

  def child_method
    puts "Child method called"
  end
end

test_klass = ChildKlass.new
test_klass.exec_now

Если я пытаюсь выполнить этот фрагмент кода, вызов child_method в блоке приводит к ошибке отсутствия метода. Кто-нибудь знает, что я делаю неправильно, и как правильно добавить такую ​​функциональность?

1 Ответ

4 голосов
/ 01 мая 2011

Блок exec_later работает в контексте ChildKlass, а не в экземпляре test_klass. Поскольку child_method является методом экземпляра, он не найден в ChildKlass.

ОБНОВЛЕНИЕ: Я нашел решение:

  def exec_now
    return unless @@block_for_later
    instance_eval &@@block_for_later
  end
...