• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メソッドのモンキーパッチ)

モンキーパッチでメソッドの事前処理・事後処理を実装する

このQ&Aのポイント
  • Ruby 2.1 環境で変更できないモジュールのメソッドに事前処理・事後処理を追加したい場合、モンキーパッチを使用することができる。
  • モンキーパッチを使用すると、元のメソッドを別の名前で定義し、新たに実装したメソッドで事前処理・事後処理を行うことができる。
  • ただし、モンキーパッチを使用する際には注意が必要であり、元のメソッドを上書きしてしまう可能性があるため、エイリアスメソッドを作成するなどの工夫が必要となる。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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) ------------------------------------------------------------------------------------------

sumire_kanou
質問者

お礼

ありがとうございました。期待どおりに書くことができました。class<< self がミソなのですね!勉強になりました。

関連するQ&A