使Ruby循环返回“x”图像而不是整数

时间:2009-10-30 13:07:04

标签: ruby loops return

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

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

如何让它返回所需数量的图像?例如,我希望space(6)返回6个spacer.png,而不是数字“6”。

谢谢!

3 个答案:

答案 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