Как СУШИТЬ в Рубине? - PullRequest
       9

Как СУШИТЬ в Рубине?

5 голосов
/ 01 октября 2010

Как я могу сделать это короче и расширяемым:

  def overview
    puts "All As:"
    for f in @a
      puts f
    end
    puts "\n"  

    puts "All Bs:"
    for f in @b
      puts f
    end
  end

Ответы [ 4 ]

8 голосов
/ 01 октября 2010
for f in @a
  puts f
end

можем ли мы написать

puts @a.join("\n")

В общем случае, когда вы хотите что-то сделать с несколькими массивами, вы можете поместить массивы в массив и затем использовать each например

[@a, @b].each do |list|
  list.each { |value| puts value }
end

и когда вы приступаете к выполнению чего-то более сложного, чем просто распечатка значений, имеет смысл использовать рефакторинг метода извлечения для выполняемой вами операции, например

[@a, @b].each do |list|
  do_something_with list
end

Наконец, есливам нужно сохранить описательные метки («Все как» и т. д.), вы можете использовать хеш:

{'As' => @a, 'Bs' => @b}.each_pair do |label, values|
    puts "All #{label}"
    puts values.join("\n")
end
4 голосов
/ 01 октября 2010
def print_all(header, ary)
  puts header
  for f in ary
    puts f
  end
end

def overview
  print_all("All As:", @a)
  puts
  print_all("All Bs:", @b)
end
1 голос
/ 01 октября 2010

Я бы сделал что-то подобное:

def overview
    [@a, @b].each do |e|
        puts e.join("\n")
    end
end
0 голосов
/ 01 октября 2010

Просто угадай ...

def overview
  puts "All As:"
  puts_a(@a)
  puts "\n"

  puts "All Bs:"
  puts_a(@b)
end

def puts_a(strs)
  for str in strs
    puts str
  end
end
...