以下内容返回作为参数提供它的任何整数。使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