我试图实现一个类,允许它的子类保存方法块,以便稍后执行它们。它工作,但似乎我采取了错误的方式。看看这个:
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
的调用会导致方法缺失错误。有人知道我做错了什么,添加这样的功能的正确方法是什么?
答案 0 :(得分:4)
块exec_later
正在ChildKlass
的上下文中运行,而不是实例test_klass
。由于child_method
是一种实例方法,因此无法在ChildKlass
找到它。
更新:我找到了解决方案:
def exec_now
return unless @@block_for_later
instance_eval &@@block_for_later
end