我想将这三种方法合并为一种,但此时无法将我的大脑包裹在其中。复杂的事实是1/3需要稍微不同的呼叫。他们都很相似,我知道有更好的方法,但现在超出我的技能水平。通过一个额外的变量传递(获取,检查或处理),我可以把它变成一个,如何做到这一点避开了我。将三种类似的方法合并为一种方法
如果你想将这些重构成一种方法,你会怎么做?
def fetch(subjects = current_subjects, queues = QUEUES)
subjects.each do |s|
queues.each { |x| fetch_results(x, s) } unless queue.nil?
end
end
def check(subjects = current_subjects, queues = QUEUES)
subjects.each do |s|
queues.each { |x| check_results(s["#{x}_recent"]) } unless queue.nil?
end
end
def process(subjects = current_subjects, queues = QUEUES)
subjects.each do |s|
queues.each { |x| process_results(s["#{x}_recent"]) } unless queue.nil?
end
end
编辑:一种解决方案是接近我早先想,但我没有说清楚,我想在what
传递作为一个很小的阵列,这可能是扩张的,并且可以用于指示是否提取,检查或处理这些信息或其组合。因此,本质上,我试图用一种方法循环三件事:
- 一个动作什么:I.E.,取,检查或处理。
- 任何数量的科目。
- 任何数量的队列,这是一个常数。
此外,其他的解决方案在这里:
http://refactormycode.com/codes/2002-three-into-one
侧面说明:队列是一个枚举,所以相应地将其命名为:_queues_。 – tokland 2012-02-15 23:00:43