题
以下返回我作为参数提供的任何整数。
def space(spacer_count)
spacer_count.times do
image_tag("24gray/spacer.png", :class => "spacer")
end
end
如何让它返回所需数量的图像?例如,我希望 space(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 方法返回块运行的次数。each 方法返回运行该块的数组。
看到这里有一个模式吗?大多数迭代器方法都会返回传递给它的内容。
块几乎像参数一样传递给调用函数。本质上,这就是您的代码中发生的情况。
block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")}
def space(spacer_count)
spacer_count.times(&block)
end
现在知道迭代器返回传递给它的内容,您可以明白为什么 space(6) 返回 6
不隶属于 StackOverflow