например, нужно есть повторяющийся блок:
def s_to_(str) puts str end colors = %w[green, red, white] colors.each do |color| if color == 'red' s_to_('text1') end if color == 'green' s_to_('text2') end if color == 'white' s_to_('text3') end end
на
callbacks = { 'green' => Proc.new { |str| s_to_(str) }, 'red' => Proc.new { |str| s_to_(str) }, 'white' => Proc.new { |str| s_to_(str) }, } colors.each_with_index do |color, i| callbacks[color].call('text'+i) end
код не тестил, поэтому, возможно , не рабочий, но идеология точно верная