2016-09-19 6 views
0

Каков наилучший способ реорганизации, поэтому у меня нет такого кода повторения? У меня в основном есть шаблон метода, и только одна часть изменяется для всех отдельных методов. Я думаю, что есть способ рефакторинга.Рефакторинг, возможно, используя блок? или Proc? Как запустить большинство методов, но изменить одну небольшую часть.

Шаг 1 необходимо запустить

def method1 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method1(t,field_name) 
    end 
end 

Шаг 2 необходимо запустить следующие

def method2 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method2(t,field_name) 
    end 
end 

Шаг 3 работает после

def method3 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method3(t,field_name) 
    end 
end 

Шаг 4 является последним

def method4 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method4(t,field_name) 
    end 
end 

Это не будет работать

def method1 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method1(t,field_name) 
      sub_method2(t,field_name) 
      sub_method3(t,field_name) 
      sub_method4(t,field_name) 
    end 
end 

ответ

2

Это то, что блоки для.

def method(title, field) 
    field2.each { |field| yield(title.to_s, field.to_s) } 
end 

Вы можете назвать свой метод так:

method(title, field) { |t, f| submethodX(t, f) } 

Таким образом, вы можете иметь один вызов для каждого шага вам нужно, и вводить изменения кода с помощью блока на месте вызова, оставляя общий код в определении method.