Come potrei fare questa breve e estensibile:Come ASCIUGARE in 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
Come potrei fare questa breve e estensibile:Come ASCIUGARE in 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
possiamo scritto
puts @a.join("\n")
Nel caso generale, quando si vuoi fare qualcosa con diversi array puoi mettere gli array in un array e quindi usare each
ad es.
[@a, @b].each do |list|
list.each { |value| puts value }
end
e una volta arrivati sul fare qualcosa di più complicato di una semplice stampa dei valori ha senso utilizzare il metodo estratto refactoring sull'operazione che si sta eseguendo per esempio
[@a, @b].each do |list|
do_something_with list
end
Infine, se è necessario mantenere etichette descrittive ("tutti come" etc.) è possibile utilizzare un hash:
{'As' => @a, 'Bs' => @b}.each_pair do |label, values|
puts "All #{label}"
puts values.join("\n")
end
Ma usa più memoria. – Hongli
c'è un modo per avere almeno una piccola etichetta/tag per @a e @b stampati? risposta alla domanda nella tua seconda parte! Grazie! – poseid
Il commento di Hongli è stato pubblicato prima di espandere la risposta con più suggerimenti. Per chiarezza, si riferisce all'uso di 'join' che costruirà una nuova stringa contenente tutti i valori. – mikej
Basta indovinare ...
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
mi piacerebbe fare qualcosa di simile:
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
'per f in ary; mette f; fine 'non è necessario. Solo 'puts ary' farà il lavoro. – steenslag
Non utilizzare 'per'. – Reactormonk