以下返回我作为参数提供的任何整数。

  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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top