alias_methodとは
alias_methodは、既存のメソッド名に新しいメソッド名を付けて再定義するメソッドのことです。
また、これによって古いメソッドを新しいメソッドの名前で呼び出すことをアラウンドエイリアスと言います。
class String
# lengthメソッドは文字列の長さを測定する
'ABC abc'.length #=> 7
# lengthメソッドからreal_lengthメソッドという名前でメソッドを再定義
alias_method :real_length, :length
# 元のlengthメソッドをオーバーライド
def length
real_length > 10 ? 'Long' : 'Short'
end
# 元のlengthメソッドの動きが可能(アラウンドエイリアス)
'ABC abc'.real_length #=> 7
# オーバーライドした内容で処理される
'ABC abc'.length #=> "Short"
end
aliasとalias_methodの違いとは
似た様なものでalias
というものもありますが、これは使い方等はほとんど変わらないですが、似て非なるもの
です。
下記の表がaliasとalias_methodの違いをまとめたものです。
aliasとalias_method対比表
説明 | alias | alias_method |
---|---|---|
メソッド名に文字列が使える | 不可能 | 可能 |
グローバル変数に別名をつける | 可能 | 不可能 |
メソッドである | No | Yes |
キーワードである | Yes | No |
オーバーライド | 不可能 | 可能 |
まとめ
メソッドを再定義することで、元のメソッドを拡張しやすかったりするので、便利な機能ですね。
「別名をつける」と表現されることもありますが、自分的には「再定義する」といった表現の方が分かりやすいなと思いました。