2011-06-22 11 views
0

宇宙船の方法と魔法の "method_missing"を1つのクラスで使う方法はありますか?以下の例では、私のようなdefinitonでfoo1 < foo2を試みるたび私undefined method '<'与える:感謝"def <=>"対 "def method_missing"

class Foo 

    def initialize(params) 
    @parent= params[:parent] 
    end 

    def <=>(o) 
    ... 
    end 

    def method_missing(sym, *args, &block) 
    @parent.send sym, *args, &block 
    end 
end 

すべてのヘルプ:)私は私はあなたの質問が何であるかを理解していない

+2

method_missingは質問とは関係ありません。 – gtd

+0

本当に - あまりにも長く働いて、明らかに見えませんでした;) – pagid

答えて

6

短い答え:

あなたはFoo内のコード行を逃している:

include Comparable 

長い答え:

あなたは<を得ることはありません、><=など、宇宙船オペレータを再定義するだけです。

Comparableを含めると、これらの方法が得られます。それらのメソッド次には、有効な応答を提供するために宇宙船オペレータを使用します。

それは何Enumerableで発生多かれ少なかれ:

あなたはモジュールを含む、eachメソッドを実装し、その後、「自由」のための他のすべてのメソッドを(mapselect、など)を取得します。

1

。 <と>メソッドを作成するには、include Comparableをクラス定義に入れ、< =>インスタンスメソッドを定義します。

関連する問題