他の回答で述べたように、同じ文字列オブジェクトへの変数を指しています。
''覚えておいてください'': Ruby は、オブジェクトを代入 (または関数に返すか渡す) するだけではコピー/複製しません。したがって、C/C++ から来た場合、Ruby は参照/ポインターのみで動作します。(そして、Java から来た場合: 動作は Java の非プリミティブと非常に似ています)。
例えば:
a = [1, 2]
b = a
b << 3
puts a.inspect
# prints [1, 2, 3]
慣れていない場合はさらに混乱します。
def foo(x)
x << 3
return nil
end
a = [1, 2]
foo(a)
foo(a)
puts a.inspect
# prints [1, 2, 3, 3]
場合によっては、Ruby は同じ機能の 2 つのメソッドを提供します。1 つは実際のオブジェクトを変更し、もう 1 つは変更を含む新しいオブジェクトを返します。
たとえばString#gsub(from, to)
、これらの変更を含む新しい文字列を返しますが、一方で String#gsub!(from, to) changes the string itself. Another example would be
Array#reject vs.
Array#reject!`
Object#dup
オブジェクトをコピーします (ただし、そのネスト オブジェクトはコピーしません)。
注意: ほとんどの場合、文字列を変更しないことは適切なスタイルと見なされます