如何设置一个方法来调用自己而不管它的名称如何,如果我想重命名它,我可以在一个地方进行更改?
示例:
class MyClass
def my_method
self.children.each do |child|
child.my_method if child.kind_of?(MyClass) #Replace here 'my_method' to something
end
end
end
答案 0 :(得分:1)
您可以使用__method__
获取当前正在执行的方法的符号名称,并使用send
按名称执行任何方法:
def foo
send __method__
end
如果你没有一些合理的条件控制递归,这将在jiffy中创建一个堆栈溢出。
编辑 - 看起来像“递归”,你的意思是你要在该类的所有实例上调用它。但是,这并没有为重命名方法提供任何灵活性。如果这些实例重新分配方法的名称并且undef
原始方法,Ruby仍然找不到它 - 在程序执行期间查找方法。