rubyのクラスメソッドの定義の仕方
最近になってようやく人のソースコードを読むということにチャレンジしています。
そんな時によく出るのが、class << self
というもの
これの意味がわからなくて、詰まっていたので調べてみました。
そもそも、クラスメソッドの定義の仕方が分かればいいので、一個ずつ段階を踏んで書きました。
オーソドックスなパターン
class Helloworld def hello 'hello' end end hello = Helloworld.new p hello.hello => "hello"
ここでnewをするのがめんどくさいので、次の形式に変更できます。
class Helloworld def self.hello 'hello' end end p Helloworld.hello => "hello"
ここで新しくメソッドを追加する場合に、毎回self.method_name
を書くのはめんどくさいということで、更に進化します。
class Helloworld class << self def hello 'hello' end def goodbye 'goodbye' end end end p Helloworld.hello => 'hello' p Helloworld.goodbye => 'goodbye'
後からメソッドを追加する時は、こんな風に書くことができます。
class << Helloworld def say_hello p 'hello' end end Helloworld.say_hello
<< self
の役割が分かれば、使い勝手が良くなりますね。
複数メソッドを定義するのなら、<< self
って書いた方が楽でいいですね。
よく使われる理由がわかりました。