Rubyではaliasを使ってメソッドに別名を付けることができる。 aliasの面白い点は、別名を付けたメソッドはaliasを評価した時点のメソッド定義を引き継ぐことだ。
別名を付けられたメソッドは、その時点でのメソッド定義を引き継 ぎ、元のメソッドが再定義されても、再定義前の古いメソッドと同 じ働きをします。あるメソッドの動作を変え、再定義するメソッド で元のメソッドの結果を利用したいときなどに利用されます。
以下のコードで確かめてみよう。
まずold methodを出力するmethodメソッドを定義する。 続いてそれにaliasでold_methodという別名をつける。 最後にmethodメソッドがnew methodと出力するように再定義する。 この状態でmethodメソッドとold_methodメソッドを呼び出す。
def method
puts 'old method'
end
alias old_method method
def method
puts 'new method'
end
method
old_method
出力結果は以下のようになる。 methodメソッドはnew methodを出力し、methodを再定義しても、old_methodはold methodと出力し続ける。 aliasを評価した時点のmethodメソッドの定義が、old_methodメソッドに引き継がれているためだ。
new method
old method
この挙動からRubyのaliasの実態は、別名を付けるというより、メソッドのコピーであることがわかる。
