有没有办法在Ruby中获取所有方法的别名?

时间:2011-07-03 00:07:18

标签: ruby metaprogramming aliasing

假设我有一个班级:

class MyClass
  def my_method
    # cool stuff
  end
  alias :my_method2 :method
end

现在我想获取方法my_method的所有别名,而不与所有对象方法进行比较。

3 个答案:

答案 0 :(得分:2)

我不确定如何不使用比较来做到这一点。但是,如果删除Object.methods,则可以限制所做的比较:

def aliased?(x)
  (methods - Object.methods).each do |m|
    next if m.to_s == x.to_s
    return true if method(m.to_sym) == method(x.to_sym)
  end
  false
end 

答案 1 :(得分:2)

有点黑客,但似乎在1.9.2中工作(但不在1.8等):

 def is_alias obj, meth
   obj.method(meth).inspect =~ /#<Method:\s+(\w+)#(.+)>/
   $2 != meth.to_s
 end

答案 2 :(得分:0)

MyClass.instance_methods(false)将为您提供为您的类定义的实例方法。这是摆脱任何祖先方法的好方法。在您的情况下,应该显示的唯一方法是my_methodmy_method2