2014-04-28 3 views

답변

23

루비에서는 리터럴 문자열이 발생하면 메모리에 객체로 할당됩니다. "foo", "bar" 및 (다음 str으로 함) 병합의 결과 : 당신이

str = "foo" + "bar" 

같이 두 개의 문자열 리터럴을 연결할 경우 실제로 세 String 객체를 할당합니다.

동일은 당신이 경우에 발생합니다

"foo" << "bar" 

많은 경우에, 이것은 당신이에 대한 걱정을 너무 많이하지 않아야 만 약한 비 효율성이다.

그러나, 당신은 루프, 그리고 경우 총 String이 커질 그렇게하면, 당신은 당신이 Array에서 문자열 부분을 수집하여이를 방지 할 수 있습니다 (모든 반복에 점점 더 큰 String 객체를 할당된다는 점에 유의 완료되면 join을 호출하고 foo << 'bar'foo을 수정하여 루프에서 사용할 수 있습니다.

\을 사용하면 중간 오브젝트을 연결하지 않지만, 대신에 효과적으로 하나 String 문자 (\ 단순히 다음 줄에 문자열을 계속하기 때문에)와 파서을 제시한다.

"foo" + "bar" + "baz" 관용구는 Java에서 자주 사용되며 문자열은 변경 불가능하며 리터럴은 컴파일 타임에 연결됩니다. (Java의 모든 문자열 리터럴은 한 번만 저장되고 코드 전체에서 다시 사용되므로 Ruby는 그렇게하지 않습니다.) 또한 Java는 여러 줄에서 문자열을 계속 처리 할 수있는 더 좋은 방법이 아니므로 Java 프로그래머가 그렇게합니다.

+1

위대한 답변입니다. – alex

+1

감사합니다. Ruby 프로그램을 작성할 때주의해야 할 중요한 부분이라고 생각합니다. – Sigi

4

\은 줄 바꿈에서 인터프리터가 줄 바꿈을 문장의 끝으로 취급하는 것을 중단합니다. 따라서 연결 또는 추가 비용을 들이지 않고도 여러 줄 문자열을 만들 수 있습니다.