すでにあるメソッドに処理を追加したい場合。
すでにあるメソッドを踏襲した新しいメソッドを定義して、メソッドの呼び出し側を新しいメソッドに向けることができますが
現実的でないですね。
ではどうやってすり替えるか。
実現手段はいくつかあると思いますが、ここではアラウンドエイリアスを使ってみます。
今回はStringのto _sメソッドを、
文字列(文字列長)
と表示するよう変えてみる。
今日のコードではaliasを使いますが、二度呼ぶとエラーとなってしまうのでirbを都度起動してください。
|
|
この前の rubyのオープンクラス - なんとなく日々徒然と使ってStringクラスにコーディングしていきます。
構文は
alias 新しいメソッド名 古いメソッド名
です。
今回の例ではto _sにold _to _sという別名をつけます。
|
|
それでto _sを書き換えちゃいます。
|
|
to _sが呼ばれた場合は書き換えたメソッドが呼ばれ、old _to _sが呼ばれた場合は昔のメソッドが呼ばれる状態です。
書き換えられたto _sは昔のto _sをold _to _sで呼び、lengthをそこにくっつけています。
これでメソッドのすり替えが完了です。