配列がデフォルトの文字列で埋められていて、デフォルトの文字列の文字の一部をランダムな位置に置き換えようとしています。配列要素の修正が正しく動作しない
私はこのような何かをした場合、私は配列のすべての要素が変更されています:
arr = ["*"] * 10
arr[0][0..2] = "aaa"
arr
# => ["aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa"]
しかし、私は別の方法で配列を初期化すると、それが動作:
(0..10).each.map {|i| arr[i] = "*"}
arr[0][0..2] = "aaa"
arr
# => ["aaa", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*"]
一部more、initialize、すべての要素は同じです:
str = "*"
(0..10).each.map {|i| arr[i] = str}
arr[0][0..2] = "aaa"
arr
# => ["aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa"]
代わりに、私はこれをユニークな要素で初期化しました:
str = "*"
(0..10).each.map {|i| arr[i] = "#{str}" }
arr[0][0..2] = "aaa"
arr
# => ["aaa", "*", "*", "*", "*", "*", "*", "*", "*", "*"]
このような動作の背景は何ですか?
は、組み込みの 'Array#new'オブジェクトコンストラクタがデフォルト値を扱うことができるので、使用する必要があります。 [ドキュメントを読む](http://ruby-doc.org/core-2.2.0/Array.html) – Charles