Array.join(“\ n”)不是join换行符的方式吗?

我有一个arrays..

[1,2,3,4] 

我想要一个包含所有由换行符分隔的元素的string..

 1 2 3 4 

但是当我尝试[1,2,3,4].join("\n")我得到了

 1\n2\n3\n4 

我觉得有一个明显的答案,但我找不到它!

是的,但是如果你打印出这个string,它将会有换行符:

 irb(main):001:0> a = (1..4).to_a => [1, 2, 3, 4] irb(main):002:0> a.join("\n") => "1\n2\n3\n4" irb(main):003:0> puts a.join("\n") 1 2 3 4 

所以它似乎达到你的愿望(?)

这里可能发生的一个微妙的错误是使用单引号而不是double。 这也会使换行符变成\ n。 所以

 puts a.join("\n") # correct 

是不一样的

 puts a.join('\n') # incorrect 

有一个很好的写在这里为什么这样的情况。

为了防止任何人在ERB模板中search此function,请尝试以下操作:

 (1..5).to_a.join("<br>").html_safe 

试试这也是:

 puts (1..4).to_a * "\n" 

你可能不想使用html_safe,就像ajay说的,取决于上下文。 Html安全可能是一个安全问题。 这取决于如果原始input实际上是安全的HTML。 HTML安全不应该直接从用户input调用,通常应该在视图之前调用。

https://bibwild.wordpress.com/2013/12/19/you-never-want-to-call-html_safe-in-a-rails-template/

[编辑回应下面的评论]

这个怎么样如果你想在新行上打印每个元素..

 > a = [1, 2, 3, 4] > a.each{|e| puts e} 1 2 3 4 => [1, 2, 3, 4]