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!

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top