ruby で module を override したくて探したメモ
そもそも、使おうとした gem が module になってて、その中のクラスメソッドを override したくてぐぐったメモ。
やりたいことは簡単。
module Hoge のクラスメソッド (method1) を override し、クラスメソッドmethod2 を呼び出した時に override 後の内容が表示されればOK.
module Hoge def self.method1 puts 'Hoge.method1' end def self.method2 self.method1 end end Hoge.method2 #=> Hoge.method1
以下2つ、どちらも再定義する形だけどこれでいいのかなー?
def Hoge.method1 puts 'Override! Hoge.method1' end Hoge.method2 #=> Override! Hoge.method1
module Hoge def self.method1 puts 'Override! Hoge.method1' end end Hoge.method2 #=> Override! Hoge.method1
でもこれだと当ファイルを読み込んだら、どこで Hoge.method1 を呼び出しても override したクラスメソッドが実行されるようだから あとあと地雷にならないか心配だ。もっとスマートに書けないのか。
railsやったりobjective-cやったりちょっとよくわかんない今日この頃。
あんまり関係ないけど以下の mix-in の説明すごく分かりやすい。
Rubyのmoduleをmix-inする際のincludeとextendの違いをシンプルな例で理解する - memo.yomukaku.net