Ruby on rails Ruby:在一个块后调用“join”
我正在看一个RailsCast101,作者用一些方法为一个博客制作了一个星级系统。在star_images方法中,他在块的末尾调用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_
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将以一个长字符串返回这些单星图像 /编辑 这样做的原因很简单,因为辅助方法将把这些图像块插入视图中。当然,您也可以使用其他方法,比如返回数组并在视图中生成字符串,但这没有意义,也不是一种好的样式