我怎么能做出这样短和可扩展:如何在Ruby中进行干燥?
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
我怎么能做出这样短和可扩展:如何在Ruby中进行干燥?
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
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
只是猜...
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
我会做这样的事情:
def overview
[@a, @b].each do |e|
puts e.join("\n")
end
end
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
'for f in ary;把f;结束'是不必要的。只要'放手'就能完成这项工作。 – steenslag 2010-10-01 15:52:47
不要使用'for'。 – Reactormonk 2010-10-01 12:07:54