В Ruby 1.9 псевдонимные методы экземпляра будут eql?
, поэтому вы можете определить:
class Module
def aliased_methods
instance_methods.group_by{|m| instance_method(m)}.
map(&:last).keep_if{|symbols| symbols.length > 1}
end
end
Теперь, если вы попробуете это, вы получите:
class Foo
def bar; 42 end
alias baz bar
def hello; 42 end
end
Foo.aliased_methods # => [[:bar, :baz]]
Array.aliased_methods # => [[:inspect, :to_s], [:length, :size]]
Обратите внимание, что некоторые пары отсутствуют, например, [:map, :collect]
. Это связано с ошибкой , которая теперь исправлена и будет в следующей версии (2.0.0). Если это важно для вас, вы можете бросить свой собственный group_by
без использования хешей или eql?
и только с использованием ==
.