如何在Ruby中干?

时间:2010-10-01 11:50:15

标签: ruby dry

我怎样才能让它更短且可扩展:

  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 个答案:

答案 0 :(得分:8)

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

最后,如果您需要保留描述性标签(“All As”等),您可以使用哈希:

{'As' => @a, 'Bs' => @b}.each_pair do |label, values|
    puts "All #{label}"
    puts values.join("\n")
end

答案 1 :(得分:4)

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

答案 2 :(得分:1)

我会做那样的事情:

def overview
    [@a, @b].each do |e|
        puts e.join("\n")
    end
end

答案 3 :(得分:0)

猜猜......

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