rubyのチェーンメソッド関数の作り方


rubyでチェーンメソッドが使える関数の作り方を教えて下さい。

[code]

    "string".hoge()
    
[/code]

hogeをつくりたい

[code]

    def hoge(){
    }
    
[/code]




クラスにメソッドを付け加えたいときは、[モンキーパッチ](http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%82%AD%E3%83%BC%E3%83%91%E3%83%83%E3%83%81)
をします。

[code]

    class String
      def hoge
        # メソッドの中身
      end
    end
    
    "string".hoge
    
[/code]

チェーンメソッドにするのは簡単です。メソッドが `self` か 同じクラスのオブジェクトを返すようにします。

[code]

    class Foo
      def m1
        puts "hi"
        self
      end
    
      def m2
        puts "bye"
        self
      end
    end
    
    f = Foo.new.m2.m2
    f.m1.m2.m2.m1
    
    # 出力
    # bye
    # bye
    # hi
    # bye
    # bye
    # hi
    
[/code]

チェーンメソッドではないですが、初期化の際にコンパクトな書き方を可能にするために、ブロックを渡すようにすることもできます。この場合ブロックを新しいオブジェクト内で実行させるために、[instance_eval](http://docs.ruby-
lang.org/ja/2.1.0/method/BasicObject/i/instance_eval.html)というメソッドを使います。

[code]

    class Foo
      def initialize(&block)
        instance_eval(&block)
      end
    
      def m1
        puts "hi"
        self
      end
    
      def m2
        puts "bye"
        self
      end
    end
    
    f = Foo.new do
      m1()
      m2()
    end
    
    # 出力
    # hi
    # bye
    
[/code]

