Machen Sie Ruby-Schleife return „x“ Bilder statt x, die ganze Zahl
Frage
Die folgenden Code gibt, was integer ich es als Parameter füttern.
def space(spacer_count)
spacer_count.times do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
Wie kann ich es die gewünschte Anzahl von Bildern machen zurückkehren? Zum Beispiel, ich will Raum (6) sechs Kopien von spacer.png zurückzukehren, nicht die Zahl „6“.
Danke!
Lösung
Wenn Sie eine einzelne Zeichenfolge enthält alle <img>
Tags zurückkehren möchten, dann können Sie wie folgt vor:
def space(spacer_count)
image_tag("24gray/spacer.png", :class => "spacer") * spacer_count
end
Andere Tipps
Wenn Sie Ruby-1.8.7 oder höher
def space(spacer_count)
spacer_count.times.map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
Mit Ruby-1.8.6 sollten Sie eine Abhilfe verwenden (es funktioniert auch mit 1.8.7 und höher). Erste Abhilfe.
def space(spacer_count)
Array.new(spacer_count).map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
Zweite Problemumgehung (mit Bereichen).
def space(spacer_count)
(1..spacer_count).map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
Es gibt einige gute Antworten hier schon, also werde ich nicht ein anderes geben. Allerdings könnte es helfen, zu verstehen, was falsch hier vor sich geht. Jeder Block in Ruby gibt die Auswertung der es letzte Aussage.
Die Zeiten Methode gibt die Anzahl, wie oft wurde die Blöcke laufen. Die Methode gibt die jeweils die Anordnung, dass der Block wurde laufen.
Sehen hier ein Muster? Die meisten dieser Iteratormethoden zurückgeben, was ihm übergeben wurde.
Die Blöcke werden an die aufrufende Funktion wie ein Argument fast übergeben. Im Wesentlichen ist es das, was im Code passiert.
block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")}
def space(spacer_count)
spacer_count.times(&block)
end
Zu wissen jetzt, dass Iteratoren zurückgeben, was ihm übergeben wurde, können Sie sehen, warum Raum (6) gibt 6