的實例,我有一個字符串:修改字符串
str="D\\projects\\myown\\java"
我分配這個字符串兩個變量,如:
str1=str
str2=str
我做了以下操作後:
idgb1=str1.gsub!("\\","_")
我得到str1
爲D_projects_myown_java
和str2
是一樣的。爲什麼會發生?我不希望str2
更改其值。
的實例,我有一個字符串:修改字符串
str="D\\projects\\myown\\java"
我分配這個字符串兩個變量,如:
str1=str
str2=str
我做了以下操作後:
idgb1=str1.gsub!("\\","_")
我得到str1
爲D_projects_myown_java
和str2
是一樣的。爲什麼會發生?我不希望str2
更改其值。
str1
和str2
只是對str
的引用,字符串不會複製到這些變量。 String#gsub!
更新了字符串。
如果你想保持str2
完好,你需要做的是這樣的:
str2 = str.dup
或
str2 = str.clone
此外,如果您使用,而不是String#gsub
String#gsub!
,str
和str2
不會被改變。
你可能也想在淺VS深層副本讀了進一步的信息,這裏一個維基百科的鏈接,解釋概念: enter link description here
而且除此之外,我想補充的是,「!」通常識別出所謂的「爆炸方法」。這些方法最終會改變它們被調用的變量的狀態。
此鏈接觸及爆炸的方法和實際上有一個例子非常相似,您所描述的問題: enter link description here
希望這有助於
感謝醃好。它的工作。 –