私は文字列を持っています:
str="D\\projects\\myown\\java"
この文字列を次のような2つの変数に割り当てました。
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は変更されません。
詳細については、浅いコピーと深いコピーについても読みたいと思うかもしれません。概念を説明するウィキペディアへのリンクです。 ここにリンクの説明を入力してください
また、追加したかったのは、「!」通常、「bang メソッド」と呼ばれるものを識別します。これらは、呼び出された変数の状態を最終的に変更するメソッドです。
このリンクは bang メソッドに触れており、実際には、あなたが説明した問題と非常によく似た例があります: ここにリンクの説明を入力してください
お役に立てれば