문제

params[:hello] # => "Some params value"

hello = params[:hello]
hello.gsub!("whatever","")

params[:hello] # => ""

이해가 안 돼요, 누군가가 왜 params[:hello] The에 의해 수정됩니다 gsub! ? 나는 예상했다 hello 문자열은 수정 될 수 있지만 params 해시시.

도움이 되었습니까?

해결책

hello 그리고 params[:hello] 동일한 문자열에 대한 참조입니다. Ruby (Java 및 Python에서와 같이)에서 할당은 값을 복사하지 않고 할당 된 변수의 동일한 값에 대한 다른 참조를 저장합니다. 따라서 문자열을 수정하기 전에 명시 적으로 복사하지 않는 한 dup) 문자열의 변경 사항은 문자열에 대한 다른 모든 참조에 영향을 미칩니다.

다른 팁

두 가지 버전이 있습니다 String#gsub 사용 가능

a= "abc" # => "abc"
b= a.gsub("b", "2") # "a2c"
a # => "abc"
c= a.gsub!("c", "3") # => "ab3"
a # => "ab3"

String#gsub! 원래 문자열을 수정하고 참조를 반환합니다.String#gsub 원본을 수정하지 않고 사본을 교체합니다.

객체를 !.

수정을 원하지 않으면 다음과 같이 복제해야합니다.

hello = params[:hello].clone

당신이 지금하고있는 방식, 당신은 사본이 아니라 그것에 대한 참조를 가지고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top