Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 修改字符串的实例_Ruby_String_Mutable - Fatal编程技术网

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方法,实际上有一个与您描述的问题非常相似的示例:

希望这有帮助