Я хочу превратить эти три метода в один, но в настоящий момент я не могу обмотать мозг вокруг него. Сложно из-за того, что 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
EDIT: Одно решение близко к тому, что я думал раньше, но я не сделал это ясно, что я хочу передать в what
как небольшом массиве, которые могут быть расширяемой и может использоваться для указания будь то выборка, проверка или обработка или любая их комбинация. Поэтому, по сути, я пытаюсь выполнить три метода одним способом:
- действие: I.E., выборка, проверка или процесс.
- любое количество предметов.
- любое количество очередей, которое является постоянным на данный момент.
Кроме того, другие решения здесь:
http://refactormycode.com/codes/2002-three-into-one
сторона примечание: очередь является перечислимы, так называют его соответствующим образом: _queues_. – tokland