Ruby 修改字符串的实例
我有一个字符串:Ruby 修改字符串的实例,ruby,string,mutable,Ruby,String,Mutable,我有一个字符串: str="D\\projects\\myown\\java" 我将此字符串分配给两个变量,如: str1=str str2=str 在我做了以下操作之后: idgb1=str1.gsub!("\\","_") 当D\u projects\u myown\u java和str2相同时,我得到str1。为什么会发生这种情况?我不想str2更改其值。str1和str2只是对str的引用,字符串不会复制到这些变量中。和String#gsub就地更新字符串 如果您想保持str2的完
str="D\\projects\\myown\\java"
我将此字符串分配给两个变量,如:
str1=str
str2=str
在我做了以下操作之后:
idgb1=str1.gsub!("\\","_")
当
D\u projects\u myown\u java
和str2
相同时,我得到str1
。为什么会发生这种情况?我不想str2
更改其值。str1
和str2
只是对str
的引用,字符串不会复制到这些变量中。和String#gsub代码>就地更新字符串
如果您想保持str2的完整性,您需要这样做:
str2 = str.dup
或
此外,如果您使用String#gsub
而不是String#gsub
、str
和str2
将不会更改。str1
和str2
只是对str
的引用,字符串不会复制到这些变量。和String#gsub代码>就地更新字符串
如果您想保持str2的完整性,您需要这样做:
str2 = str.dup
或
此外,如果您使用String#gsub
而不是String#gsub
、str
和str2
将不会更改。要了解更多信息,您可能还需要阅读浅拷贝和深拷贝,这里有一个到维基百科的链接,解释了这一概念:
另外,我想补充一点,那就是“!”通常识别所谓的“bang方法”。这些方法最终会改变所调用变量的状态
此链接涉及bang方法,实际上有一个与您描述的问题非常相似的示例:
希望这有助于有关浅拷贝和深拷贝的更多信息,请参阅Wikipedia的链接,其中解释了这一概念:
另外,我想补充一点,那就是“!”通常识别所谓的“bang方法”。这些方法最终会改变所调用变量的状态
此链接涉及bang方法,实际上有一个与您描述的问题非常相似的示例:
希望这有帮助