문제
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
당신이 지금하고있는 방식, 당신은 사본이 아니라 그것에 대한 참조를 가지고 있습니다.
제휴하지 않습니다 StackOverflow