2009-09-19 4 views
43

나는 ..Array.join (" n") 줄 바꿈과 결합하는 방법이 아닙니까?

[1,2,3,4] 

배열을하고 난 줄 바꿈으로 구분 된 모든 요소를 ​​포함하는 문자열을 원하는 ..

1 

2 

3 

4 

을하지만 [1,2,3,4].join("\n")을하려고 할 때

1\n2\n3\n4 
를 얻을 수

명백한 대답이있는 것처럼 느껴진다. 그러나 나는 그것을 발견 할 수 없다! 거기에

답변

61

당신이 밖으로 해당 문자열을 인쇄하는 경우 네,하지만 그것을해야합니다 줄 바꿈 :

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 

은 그래서 당신이 원하는 것을 달성하기 위해 나타나지 않습니다

5

이 또한 시도 (?) :

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

여기서 발생할 수있는 미묘한 오류는 double 대신 작은 따옴표를 사용하는 것입니다. 또한 개행 문자를 \ n으로 렌더링하는 효과가 있습니다. 그래서

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

는이 경우 here 이유에 우수한 쓰기 업이

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

와 동일하지 않습니다.

+0

감사합니다 [아래에 의견을 응답으로 편집,하지만 난 이유를 이해할 수 없다. – fangxing

+0

나는 그 이유에 대한 설명에 대한 링크를 포함하도록 답변을 편집했습니다. – Screamer

6

그냥 경우 ERB 템플릿에서이 기능에 대한 검색 사람이 다음이 시도 :

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

나는'(1..5) .to_a.join ("\ n")'을 선호하고, erb에서는'white-space : pre-wrap' 스타일을 추가해야합니다. – fangxing

0

이 방법에 대해 당신이 새로운 라인의 각 요소를 인쇄하고 싶다면 ..

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

당신은 할 수있다 컨텍스트에 따라 ajay가 말한 것처럼 html_safe를 사용하고 싶지 않습니다. HTML 안전은 보안 문제 일 수 있습니다. 이는 원래 입력이 인 경우 실제로 html로 안전한지 여부에 달려 있습니다. HTML 안전은 사용자가 직접 입력 할 때 호출되어서는 안되며 일반적으로보기 전에 호출되어야합니다.

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

가 작동,

+0

반드시 그렇지는 않습니다. 블로그 게시물의 마지막 줄에 ** 코드가 html_safe를 호출해서는 안됩니다. 코드가 문자열을 구성하고 실제로 html-safety! **를 보장하지 않는 한! 'html_safe' *를 사용하는 것은 그것이 무엇을하는지 이해하고 보안 함의가 있음을 이해하는 한 괜찮을 수 있습니다. 이런 대답은 도움이되지 않습니다. – zelanix

+0

지금 우연의 일치로, 당신이 대답을 편집했음을 알았습니다. 그것은 훌륭합니다. 그리고 나는 당신의 새로운 일에 동의합니다. 그냥 메모, 만약 당신이 의견에 회신, 내 투표를 변경할 수 있습니다. – zelanix

+0

그러나 50 명의 담당자가 있으니 미래에는 답변이 아니라 의견으로 더 적절할 것입니다. – zelanix

관련 문제