2011-01-23 1 views
1

私はブロック例えばリファクタリング私はRubyの1.9.2に</p> <p>を使用していた複数のブロックを含むブロックと方法自体

をとり、検索というクラスメソッドを持っています私は何をしたいのですがMyClass.searchメソッドをリファクタリングし、それぞれのif/end文

例えばためのシンプルな1行のメソッドを持っている

class MyClass 
    def self.search do 
    if criteria1 
     keywords "abcde", fields: :c1 do 
     minimum_match(1) 
     end 
    end 

    if criteria2 
     keywords "defghi", fields: :c2 do 
     minimum_match(1) 
     end 
    end 
    end 
end 

class MyClass 

    def self.search do 
    c1_method 
    c2_method 
    end 

    def self.c1_method 
    if criteria1 
     return keywords "abcde", fields: :c1 do 
     minimum_match(1) 
     end 
    end 
    end 

    def self.c2_method 
    if criteria2 
     return keywords "defghi", fields: :c2 do 
     minimum_match(1) 
     end 
    end 
    end 
end 

しかし、上記のリファクタリングはうまくいきません。私はc1_methodとc2_methodで返されている "ブロック"のように見えますが、実際には返されず、検索メソッドで評価されていませんが、どうすればよいか分かりません。

+0

criteria1とcriteria2はどこに定義されていますか? – scragz

+0

criteria1とcriteria2は本当に重要ではありません。何でもかまいません(たとえば、Time.new.year> 2010の場合)。 – user141146

+0

実際、私はc1_methodとc2_methodが意図しているものは不明です。彼らはマージする必要があるオブジェクトのセットを返しますか?基準は相互に排他的ですか? – knowtheory

答えて

0

よく、メソッドの本体を取得するためにmethod(sym)コールを使用できます。

>> def foo(bar); bar * 2; end 
=> nil 
>> def baz(bleep); method(:foo).call(bleep); end 
=> nil 
>> baz(6) 
=> 12 
関連する問題