2012-05-29 7 views
5

루비 문서를 탐색하는 동안 the replace method이 발견되었지만이 방법의 사용 사례가 무엇인지 알 수 없습니다.Ruby에서 String #이 대체되는 이유는 무엇입니까?

내가 생각할 수있는 유일한 점은 메모리 관리 (새로운 문자열의 길이가 이전보다 작거나 같은 경우 재 할당이 필요없는 것과 같은)에 관한 것입니다.

아이디어가 있으십니까? 문자열에 반대

답변

3

사용 사례는 많이 뭔가를 달성하고자하는 단지 경우 정말 패스 참조하여 변수의 값을 직접 변경할 수있는 다른 언어로. 따라서 String을 메서드에 전달할 수 있으며이 메서드는 문자열을 완전히 다른 것으로 변경할 수 있습니다.

그러나 문자열을 비우고 빈 문자열에 새 문자열을 추가하면 동일한 결과를 얻을 수 있습니다. 다른 클래스도 비슷한 방법을 사용합니다 (배열 및 해시 참조).

그러나 실제로 이러한 방법을 사용해야 할 필요성을 느끼는 경우, 모퉁이에 몸을 걸고 전체 문자열을 변경해야하는 것보다 다른 방법을 모색해야합니다 (예 : 데이터 구조 전달 문자열 대신에 메서드로).

+0

이 링크는 그러한 방법이 유용한 이유를 이해하는 데 유용합니다. http://stackoverflow.com/questions/1872110/is-ruby-pass-by-reference-or-by-value – Scharron

2

전체 문자열, 바꾸기 방법을 사용하여 대체 할 수있다 : "에 오신 것을 환영합니다 PHP에"

myString = "Welcome to PHP!" 

=>를

myString.replace "Goodbye to PHP!" 

=> "안녕히 가세요!"

소스 - http://www.techotopia.com/index.php/Ruby_String_Replacement,_Substitution_and_Insertion#Changing_a_Section_of_a_String

+0

그래, 그게 무슨 의미가 있니? 'myString = "Hello"다음에'myString = "world"가 동일하게 동작합니다 (메모리 관리를 제외하고는?) – Scharron

+1

@Scharron : 아니요, 원격으로도 그렇게하지 않습니다. 'String # replace'는 문자열 객체의 내용을 대체합니다. 당신이하고있는 일은 완전히 다른, 완전히 무관 한 문자열을 같은 변수에 할당하는 것입니다. –

+0

@ JörgWMittag : 네, 마침내 이해했습니다 (수락 된 답변 참조). – Scharron

관련 문제