👋

Ruby で alias 元のメソッドを取得する

2025/01/06に公開

Ruby で alias 元のメソッドって取得できるんだっけ?を調べたので覚書。
例えば次のような alias_method でメソッド定義されている時に foo から puts を取得することを想定しています。

module Kernel
  alias_method :foo, :puts
end

この場合 Method#original_name で alias 元のメソッド名を取得することができます。

module Kernel
  alias_method :foo, :puts
end

# 元々のメソッド名が取得できる
p method(:foo).original_name
# => :puts

また、これは alias_method がネストしている場合やそもそも alias_method されてないメソッドでも元のメソッド名を取得することができます。

module Kernel
  alias_method :foo, :puts
  alias_method :bar, :foo
end

# ネストしていても元のメソッド名が取得できる
p method(:bar).original_name    # => :puts

# そもそも alias_method されていなくてもメソッド名が取得できる
p method(:puts).original_name   # => :puts

ちなみに alias でも同じ挙動になります。

module Kernel
  alias foo puts
end

# 元々のメソッド名が取得できる
p method(:foo).original_name
# => :puts
GitHubで編集を提案

Discussion