假设我有一个班级:
class MyClass
def my_method
# cool stuff
end
alias :my_method2 :method
end
现在我想获取方法my_method的所有别名,而不与所有对象方法进行比较。
答案 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_method
和my_method2
。