特定のメソッドのエイリアスがあれば表示する方法
Hash#delete
が破壊的メソッドのせいで String#delete
が非破壊だと忘れてしまうことが良くあるので、String#remove
のようなエイリアス関数を作ろうかと思ったのですが、既に存在した場合無駄なので特定のメソッドのエイリアスが現在の環境で既に用意されているかどうかを調べる方法が知りたいです。
今はGoogleで検索したりドキュメントでそれらしい関数がないか探しているのですが、もっと明確に特定のメソッドのエイリアス一覧を表示する方法はなにかないでしょうか?
追記
@sakuro さんに教えて頂いた Object.instance_method
を使って書いてみました。
class Object
def self.method_aliases
instance_methods.group_by do |i|
instance_method(i)
end.select { |k, v| v.size > 1 }.map { |k, v| v }
end
def self.aliases_of(method_symbol)
method_aliases&.find { |i| i.include?(method_symbol) }&.reject { |i| i == method_symbol }
end
end
Hash.aliases_of(:has_key?)
# => [:include?, :key?, :member? ]
ただ、Rails環境で試してみた所 [:byebug,:debugger]
や [:awesome_inspect, :ai]
など一部の gemで拡張してるメソッドが拾えないようです。group_by
の比較演算子の問題でしょうか…?