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
の実態は、別名を付けるというより、メソッドのコピーであることがわかる。