我想將這三種方法合併爲一種,但此時無法將我的大腦包裹在其中。複雜的事實是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