无论名称如何,都以递归方式调用Ruby方法

时间:2014-09-27 21:12:16

标签: ruby recursion substitution

如何设置一个方法来调用自己而不管它的名称如何,如果我想重命名它,我可以在一个地方进行更改?

示例:

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

1 个答案:

答案 0 :(得分:1)

您可以使用__method__获取当前正在执行的方法的符号名称,并使用send按名称执行任何方法:

def foo
  send __method__
end

如果你没有一些合理的条件控制递归,这将在jiffy中创建一个堆栈溢出。

编辑 - 看起来像“递归”,你的意思是你要在该类的所有实例上调用它。但是,这并没有为重命名方法提供任何灵活性。如果这些实例重新分配方法的名称并且undef原始方法,Ruby仍然找不到它 - 在程序执行期间查找方法。