次の Ruby コードを検討してください。
a = ["x"] * 3 # or a = Array.new(3, "x")
a[0].insert(0, "a")
a.each {|i| puts i}
出力はax、x、x(もちろん新しい行で)になると思います。ただし、Ruby 1.9.1 では、出力は ax、ax、ax です。どうしたの?a
問題を配列の定義方法に絞り込みました。はっきりと書き出すと
a = ["x", "x", "x"]
その後、コードは期待どおりに機能しますが、元のコードのどちらのバージョンでも、この予期しない動作が発生します。*/initializer は、コピーが実際には文字列「x」の同じコピーへの参照であることを意味しているようです。ただし、挿入コマンドの代わりに私が書く場合
a[0] = "a" + a[0]
次に、目的の出力を取得します。これはバグですか、それとも私が理解できない機能が働いているのでしょうか?