以下返回我作为参数提供的任何整数。
def space(spacer_count)
spacer_count.times do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
如何让它返回所需数量的图像?例如,我希望space(6)返回6个spacer.png,而不是数字“6”。
谢谢!
答案 0 :(得分:4)
如果要返回包含所有<img>
标记的单个字符串,则可以执行以下操作:
def space(spacer_count)
image_tag("24gray/spacer.png", :class => "spacer") * spacer_count
end
答案 1 :(得分: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 :(得分:2)
这里已经有了一些很好的答案,所以我不打算给另一个。但是,这可能有助于理解这里出了什么问题。 Ruby中的每个块都返回对它的最后一个语句的评估。
times方法返回块运行的次数。 每个方法返回运行块的数组。
在这里看到一个模式?大多数这些迭代器方法都返回传递给它的内容。
块几乎像参数一样传递给调用函数。基本上这就是你的代码中发生的事情。
block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")}
def space(spacer_count)
spacer_count.times(&block)
end
现在知道迭代器返回传递给它的内容,你可以看到为什么space(6)返回6