print + each()块 - 为什么加入不起作用?

时间:2009-02-12 21:18:04

标签: ruby-on-rails ruby syntax

我期待这个输出:

output:xyz

但如果我键入以下内容:

a = ["x", "y", "z"]
print "output:" + a.each {|i| print i}.to_s

为什么在单词输出之前和之后得到'xyz'?

xyzoutput:xyz 

2 个答案:

答案 0 :(得分:4)

在irb:

>> %w{x y z}.each {|i| i }
=> ["x", "y", "z"]

each的调用的返回值是调用它的Enumerable对象。因此,您基本上打印出要传递给each的块中的数组的每个元素,然后将数组转换为字符串并再次打印,并将其与字符串{{1}连接起来}。

答案 1 :(得分:1)

可能你想要的是:

puts "output: #{a.join}"

或更详细地说,如果这个想法更清晰:

puts "output: #{a.map {|element| element.to_s}.join}"