Rubyでメソッドのフック
Rubyでメソッドのフックをする方法をメモ. ここでいうフックとは,「実行するプログラムコードに対して割込み、処理を捕捉すること」と定義する.
class Hoge def hello puts "hello!" end end # オープンクラス class Hoge alias_method :old_hello, :hello def hello puts "---before---" old_hello() puts "---after---" end end hoge = Hoge.new hoge.hello() #---before--- #hello! #---after---
ちゃんとフックできてる.
Module#alias_method*1でオリジナルのhelloメソッドをold_helloメソッドとして残しておく. その後にhelloメソッドをオーバーライドして, オリジナルのメソッドの前と後に処理を挟み込む.
ネタ本
この本にこういうテクニックが分かりやすく説明されている.
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 12人 クリック: 462回
- この商品を含むブログ (108件) を見る
黒魔術? いいや, 全ては「プログラミング」なのだ. JSでもフックをやってみたいです.
*1:HogeクラスはClassクラスのオブジェクト. ClassクラスのスーパクラスはModuleクラス. 全てはオブジェクトなのでござる.