0

私は文字列を持っています:

str="D\\projects\\myown\\java"

この文字列を次のような2つの変数に割り当てました。

str1=str
str2=str

以下の操作を行った後:

idgb1=str1.gsub!("\\","_")

私は同じように取得str1D_projects_myown_javastr2同じです。なぜこれが起こるのですか?str2その値を変えたくない。

4

2 に答える 2

5

str1str2は単なる参照strであり、文字列はこれらの変数にコピーされません。そしてString#gsub!、文字列をその場で更新します。

無傷のままにしたい場合はstr2、次のようにする必要があります。

str2 = str.dup

また

str2 = str.clone

また、String#gsubの代わりにを使用してもString#gsub!strstr2は変更されません。

于 2012-12-12T11:22:56.503 に答える
1

詳細については、浅いコピーと深いコピーについても読みたいと思うかもしれません。概念を説明するウィキペディアへのリンクです。 ここにリンクの説明を入力してください

また、追加したかったのは、「!」通常、「bang メソッド」と呼ばれるものを識別します。これらは、呼び出された変数の状態を最終的に変更するメソッドです。

このリンクは bang メソッドに触れており、実際には、あなたが説明した問題と非常によく似た例があります: ここにリンクの説明を入力してください

お役に立てれば

于 2012-12-13T01:37:09.053 に答える