ruby

self と self.class の違い

self.class は自身のクラスを返す。 self は自身のクラスまたはインスタンスを返す。 class Hoge def moge puts self.class.methods end def noge puts self.methods end end h = Hoge.new h.moge puts "-----" h.noge 出力結果は下記となる。 new allocate …

$LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib]) の意味

Serverspecのbin/serverspec-initに書かれていた一行です。 $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib]) 趣旨 $LOAD_PATH に実行中のファイルのディレクトリから ../lib の場所を追加する。 $LOAD_PATH に lib ディレクトリの位置を…

委譲の使いどころ

委譲について調べたので記録を残しておきます。 参考 Rubyでdelegation(委譲)を簡単にする2つの方法 http://qiita.com/w650/items/671cc9c49b2ebf60620d 「継承より委譲」≠「継承使うな」 http://osa.hatenablog.com/entry/2014/08/28/204853 まとめ Ruby で…

配列の要素の中で特定の条件を満たす要素を取り出す

partition メソッドを使うことで特定の条件を満たす要素を取り出すことができます。 下記は [1,9,3,15,5] という配列から 4 以上の要素を変数 a に、3 未満の要素を変数 b に代入します。 a, b = [1,9,3,15,5].partition{ |item| item > 3 }

特異メソッドから直接インスタンスメソッドは呼び出せない

下記のような書き方をするとエラーになる。 class A def self.speak say_hello end def say_hello puts "Hello" end end A.speak # undefined local variable or method というエラーが表示される。 self.speakメソッドの中で自分自身のクラスをnewすると呼…