私は文字列を持っています:
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 メソッドに触れており、実際には、あなたが説明した問題と非常によく似た例があります: ここにリンクの説明を入力してください
お役に立てれば