【发布时间】:2011-01-23 21:37:24
【问题描述】:
我正在使用 Ruby 1.9.2
我有一个名为 search 的类方法,它需要一个块
例如
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 语句提供一个简单的单行方法
例如它看起来像这样:
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 中返回的“块”并没有真正在搜索方法中返回和评估,但我不知道该怎么做。
【问题讨论】:
-
criteria1和criteria2在哪里定义?
-
criteria1 和 criteria2 并不是很重要。它们可以是任何东西(例如,如果 Time.new.year > 2010)。
-
实际上,我不清楚 c1_method 和 c2_method 打算做什么。它们是否返回需要合并的对象集?这些标准是否相互排斥?
标签: ruby-on-rails ruby lambda block