Подтвердить что ты не робот

Array.join( "\n" ) не способ присоединиться к новой строке?

У меня есть массив.

[1,2,3,4]

и я хочу строку, содержащую все элементы, разделенные символом новой строки.

1

2

3

4

но когда я пытаюсь [1,2,3,4].join("\n"), я получаю

1\n2\n3\n4

Я чувствую, что есть очевидный ответ, но я не могу его найти!

4b9b3361

Ответ 1

Да, но если вы напечатаете эту строку, в ней будут символы новой строки:

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

Таким образом, похоже, что вы достигли желаемого (?)

Ответ 2

Тонкая ошибка, которая может возникнуть здесь, заключается в использовании одинарных кавычек вместо двойных. Это также влияет на рендеринг строк новой строки как \n. Так

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

не совпадает с

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

Существует отличная запись о том, почему это так здесь.

Ответ 3

На всякий случай, кто ищет эту функциональность в шаблоне ERB, попробуйте следующее:

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

Ответ 4

Попробуйте также:

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

Ответ 5

Возможно, вы не захотите использовать html_safe, как сказал аджай, в зависимости от контекста. Безопасность Html может быть проблемой безопасности. Это зависит от того, был ли исходный вход действительно безопасным для html. Безопасность HTML не должна вызываться на входе напрямую от пользователя и обычно должна быть вызвана перед представлением.

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

[отредактировано в ответ на комментарий ниже]

Ответ 6

Как насчет этого Если вы хотите напечатать каждый элемент на новой строке.

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

Ответ 7

Как подразумевают некоторые другие ответы выше, Rails может экранировать ваш код перед отображением в формате html. Вот пример, который решает эту проблему (сначала очистите входные данные, чтобы вы могли "безопасно" вызвать html_safe для результата):

my_array = [1, 2, 3, 4]
my_array.map{ |i| i.to_s.sanitize }.join("\n").html_safe

Вам нужно только sanitize если вы не доверяете вводным данным.

Ответ 8

Используйте клавишу Enter или Return на вашей поверхности для печати. .-.

[1,2,3,4].join("

")