以下內容返回作爲參數提供它的任何整數。使Ruby循環返回「x」圖像而不是x,整數
def space(spacer_count)
spacer_count.times do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
如何讓它返回所需數量的圖像?例如,我希望空間(6)返回spacer.png的六個副本,而不是數字「6」。
謝謝!
以下內容返回作爲參數提供它的任何整數。使Ruby循環返回「x」圖像而不是x,整數
def space(spacer_count)
spacer_count.times do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
如何讓它返回所需數量的圖像?例如,我希望空間(6)返回spacer.png的六個副本,而不是數字「6」。
謝謝!
如果你想返回一個包含所有<img>
標籤一個字符串,那麼你就可以做到以下幾點:
def space(spacer_count)
image_tag("24gray/spacer.png", :class => "spacer") * spacer_count
end
如果使用Ruby 1.8.7或更高
def space(spacer_count)
spacer_count.times.map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
使用Ruby 1.8.6你應該使用一種解決方法(它也可與1.8.7或更高)。 第一種解決方法。
def space(spacer_count)
Array.new(spacer_count).map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
第二個解決方法(使用範圍)。
def space(spacer_count)
(1..spacer_count).map do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
有一些很好的答案已經在這裏,所以我不打算再給一個。但是,這可能有助於瞭解這裏出了什麼問題。 Ruby中的每個塊返回對最後一條語句的評估。
times方法返回塊運行的次數。 每個方法都會返回塊在其上運行的數組。
在這裏看到一個模式?大多數這些迭代器方法返回傳遞給它的內容。
塊幾乎就像參數一樣傳遞給調用函數。基本上這就是你的代碼中發生的事情。
block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")}
def space(spacer_count)
spacer_count.times(&block)
end
現在知道了迭代器返回的內容傳遞給它,你可以看到爲什麼空間(6)返回6
感謝您的解釋。 – 2009-10-31 07:04:28
沒問題。我相信,在瞭解根本原因方面,不僅僅是瞭解解決問題的方法,而且在防止問題方面還有很長的路要走。 – EmFi 2009-10-31 07:27:08
尼斯之一!在這種情況下,我從未考慮過使用*的想法。 – 2009-10-30 17:45:39
乾杯。鍛鍊了魅力。 :-) – 2009-10-31 07:03:36