2009-10-30 36 views
1

以下內容返回作爲參數提供它的任何整數。使Ruby循環返回「x」圖像而不是x,整數

def space(spacer_count) 
    spacer_count.times do 
     image_tag("24gray/spacer.png", :class => "spacer") 
    end 
    end 

如何讓它返回所需數量的圖像?例如,我希望空間(6)返回spacer.png的六個副本,而不是數字「6」。

謝謝!

回答

4

如果你想返回一個包含所有<img>標籤一個字符串,那麼你就可以做到以下幾點:

def space(spacer_count) 
    image_tag("24gray/spacer.png", :class => "spacer") * spacer_count  
end 
+0

尼斯之一!在這種情況下,我從未考慮過使用*的想法。 – 2009-10-30 17:45:39

+0

乾杯。鍛鍊了魅力。 :-) – 2009-10-31 07:03:36

2

如果使用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 
2

有一些很好的答案已經在這裏,所以我不打算再給一個。但是,這可能有助於瞭解這裏出了什麼問題。 Ruby中的每個塊返回對最後一條語句的評估。

times方法返回塊運行的次數。 每個方法都會返回塊在其上運行的數組。

在這裏看到一個模式?大多數這些迭代器方法返回傳遞給它的內容。

塊幾乎就像參數一樣傳遞給調用函數。基本上這就是你的代碼中發生的事情。

block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")} 

def space(spacer_count) 
    spacer_count.times(&block) 
end 

現在知道了迭代器返回的內容傳遞給它,你可以看到爲什麼空間(6)返回6

+0

感謝您的解釋。 – 2009-10-31 07:04:28

+0

沒問題。我相信,在瞭解根本原因方面,不僅僅是瞭解解決問題的方法,而且在防止問題方面還有很長的路要走。 – EmFi 2009-10-31 07:27:08