问题描述:

I'm using Ruby 1.9.2

I have a class method called search that takes a block

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

What I'd like to do is refactor the MyClass.search method and have a simple one-line method for each if/end statement

e.g. it would look something like this:

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

But the refactoring that I show above doesn't quite work. It looks like the "blocks" that I'm returning in c1_method and c2_method aren't really being returned and evaluated in the search method, but I'm not sure how to do that.

网友答案:

Well, you can use the method(sym) call in order to get at the body of a method.

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