2017-03-06 2 views
-1

は、誰も私にこれを説明することができます:なぜArray.new(3、[])はRubyの[[]、[]、[]]と違うのですか?

irb(main):001:0> a = Array.new(3, [])      
=> [[], [], []]           

irb(main):001:0> b = [[], [], []]       
=> [[], [], []]           

irb(main):003:0> a.each_with_index{ |r, idx| r << 'a' } 
=> [["a", "a", "a"], ["a", "a", "a"], ["a", "a", "a"]]  

irb(main):004:0> b.each_with_index{ |r, idx| r << 'a' } 
=> [["a"], ["a"], ["a"]]         
+0

["\ [ruby \] Array.new"](http://stackoverflow.com/search?q=%5Bruby%5D+Array.new)を検索すると重複が増えます。 –

答えて

2

.new方法を使用する場合:

ので、すべての配列要素が同じハッシュを格納し、そのうちの一つへの変更は、それらすべてに影響します。

複数のコピーが欲しいものをしている場合は、配列の要素を初期化する必要があるたびに、そのブロックの結果を使用してブロックバージョン使用する必要があります。ここでは例を読む

2.3.0 :001 > a = Array.new(3) { [] } 
=> [[], [], []] 
2.3.0 :002 > a.each_with_index{ |r, idx| r << 'a' } 
=> [["a"], ["a"], ["a"]] 

を - https://ruby-doc.org/core-2.2.0/Array.html#method-c-new

関連する問題