Ruby on rails Ruby:在一个块后调用“join”

Ruby on rails Ruby:在一个块后调用“join”,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在看一个RailsCast101,作者用一些方法为一个博客制作了一个星级系统。在star_images方法中,他在块的末尾调用join。我认为这会将数组变成字符串,但为什么需要这样做呢 看法 私人的 def star_images (0...5).map do |position| star_image(((@rating-position)*2).round) end.join end def star_image(value) image_

我正在看一个RailsCast101,作者用一些方法为一个博客制作了一个星级系统。在star_images方法中,他在块的末尾调用join。我认为这会将数组变成字符串,但为什么需要这样做呢

看法

私人的

 def star_images
    (0...5).map do |position|
      star_image(((@rating-position)*2).round)
    end.join
  end

  def star_image(value)
    image_tag "/images/#{star_type(value)}_star.gif", :size => '15x15'
  end

  def star_type(value)
    if value <= 0
      'empty'
    elsif value == 1
      'half'
    else
      'full'
    end
  end
star_image方法生成一个字符串,其中包含一个img标记。star_images方法应该返回一个包含5个img标记的字符串

如果作者没有在star_images中调用join,那么star_images将返回一个包含5个字符串的数组,这可能会导致意外行为。通常,如果您有一个生成一些HTML的助手函数,它应该以字符串而不是数组的形式返回它。通过调用join,他将所有5个字符串连接到一个字符串中,这就是返回的字符串。

star\u image方法生成一个字符串,其中包含一个img标记。star_images方法应该返回一个包含5个img标记的字符串


如果作者没有在star_images中调用join,那么star_images将返回一个包含5个字符串的数组,这可能会导致意外行为。通常,如果您有一个生成一些HTML的助手函数,它应该以字符串而不是数组的形式返回它。通过调用join,他将所有5个字符串连接到一个字符串中,这就是返回的字符串。

简单回答:结果应该是字符串,而不是数组

背后的原因可能是ruby 1.8改为1.9

以这段代码为例:

puts ['a', 'b']
puts ['a', 'b'].to_s 
puts "#{['a', 'b']}"
使用ruby 1.8,您可以获得:

a
b
ab
ab
我希望我是对的。我没有可用的ruby 1.8版本

使用ruby 1.9,您可以获得:

a
b
["a", "b"]
["a", "b"]

Arrayto_s是自ruby 1.9以来的ArraySpect。如果需要“可读”而非技术字符串表示,则应使用Arrayjoin。

简单回答:结果应为字符串,而不是数组

背后的原因可能是ruby 1.8改为1.9

以这段代码为例:

puts ['a', 'b']
puts ['a', 'b'].to_s 
puts "#{['a', 'b']}"
使用ruby 1.8,您可以获得:

a
b
ab
ab
我希望我是对的。我没有可用的ruby 1.8版本

使用ruby 1.9,您可以获得:

a
b
["a", "b"]
["a", "b"]

Arrayto_s是自ruby 1.9以来的ArraySpect。如果需要“可读”而非技术字符串表示,则应使用Arrayjoin。

基本上是5个img块的串联

star_image返回一个新字符串,该字符串包含一个星图像的一个img块。这是为每个数组元素0…5调用的。map和join将以一个长字符串返回这些单星图像

/编辑


这样做的原因很简单,因为辅助方法将把这些图像块插入视图中。当然,您可以使用其他方法,例如返回数组并在视图中生成字符串,但这没有意义,也不是一种好的样式。

基本上,它是5个img块的串联

star_image返回一个新字符串,该字符串包含一个星图像的一个img块。这是为每个数组元素0…5调用的。map和join将以一个长字符串返回这些单星图像

/编辑

这样做的原因很简单,因为辅助方法将把这些图像块插入视图中。当然,您也可以使用其他方法,比如返回数组并在视图中生成字符串,但这没有意义,也不是一种好的样式