使用包含多个块本身的块重构一个方法

时间:2011-01-23 21:37:25

标签: ruby-on-rails ruby lambda block

我正在使用Ruby 1.9.2

我有一个名为search的类方法,它采用一个块

e.g。

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

我想要做的是重构MyClass.search方法,并为每个if / end语句提供一个简单的单行方法

e.g。它看起来像这样:

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中返回的“块”实际上并没有在搜索方法中返回和评估,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

好吧,你可以使用method(sym)调用来获取方法的主体。

>> def foo(bar); bar * 2; end
=> nil
>> def baz(bleep); method(:foo).call(bleep); end
=> nil
>> baz(6)
=> 12