- ベストアンサー
モンキーパッチでメソッドの事前処理・事後処理を実装する
- Ruby 2.1 環境で変更できないモジュールのメソッドに事前処理・事後処理を追加したい場合、モンキーパッチを使用することができる。
- モンキーパッチを使用すると、元のメソッドを別の名前で定義し、新たに実装したメソッドで事前処理・事後処理を行うことができる。
- ただし、モンキーパッチを使用する際には注意が必要であり、元のメソッドを上書きしてしまう可能性があるため、エイリアスメソッドを作成するなどの工夫が必要となる。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ruby のクラスメソッドにaliasを張る場合は、class<< selfを使って囲うことで実現できます。 これを使うと良いでしょう。 ------------------------------------------------------------------------------------------ # 古いMylibの実装 module Mylib def self.mymethod(n) puts "hello!" * n end def mymethod(*args) Mylib.mymethod(*args) end end module Mylib def self.mymethod_new(n) # 事前・事後処理を行うメソッドの実装です。 puts "mymethod_new" Mylib.mymethod_old(n.is_a?(Fixnum) ? n : 1) end def mymethod_new(*args) # alias_method でシンボル参照させるための定義です。 Mylib.mymethod_new(*args) end # クラスメソッドにエイリアスを設定する場合は、class<< selfで囲う class<< self alias_method :mymethod_old, :mymethod alias_method :mymethod, :mymethod_new end end p Mylib.mymethod_new(3) ------------------------------------------------------------------------------------------
お礼
ありがとうございました。期待どおりに書くことができました。class<< self がミソなのですね!勉強になりました。