２つの配列の配列について

[code]

      N = 5
      p Array.new(N){Array.new(N, false)}
      p Array.new(N, Array.new(N, false))
    
[/code]

上記２つの出力に違いがあるのでしょうか？




同じです。ただし、二つは異なる配列であることに注意してください。

以下のようにすると、構造の違いが明らかになります。

_Array.new(N){ Array.new(N, false)}_ :

[code]

    N = 5
    a_block = Array.new(N){Array.new(N, false)}
    a_block[0][0] = true
    p a_block
    
    # => [[true, false, false, false, false],
    #    [false, false, false, false, false], 
    #    [false, false, false, false, false], 
    #    [false, false, false, false, false], 
    #    [false, false, false, false, false]]
    
[/code]

**vs**

_Array.new(N, Array.new(N, false))_ :

[code]

    N = 5
    a_instant = Array.new(N, Array.new(N, false))
    a_instant[0][0] = true
    p a_instant
    
    # => [[true, false, false, false, false], 
    #    [true, false, false, false, false], 
    #    [true, false, false, false, false], 
    #    [true, false, false, false, false], 
    #    [true, false, false, false, false]]
    
[/code]

ドキュメントの以下の部分の解釈に注意して理解するようにしてください。 (以下の部分は itochan の回答を引用させてもらっています。)

> [_](http://docs.ruby-lang.org/ja/2.1.0/method/Array/s/new.html) 長さ size
> の配列を生成し、各要素のインデックスを引数としてブロックを実行し、 各要素の値をブロックの評価結果に設定します。

**vs**

> [_](http://docs.ruby-lang.org/ja/2.1.0/method/Array/s/new.html) 長さ size
> の配列を生成し、各要素を val で初期化して返します。




同じです。ただし、二つは異なる配列であることに注意してください。

以下のようにすると、構造の違いが明らかになります。

_Array.new(N){ Array.new(N, false)}_ :

[code]

    N = 5
    a_block = Array.new(N){Array.new(N, false)}
    a_block[0][0] = true
    p a_block
    
    # => [[true, false, false, false, false],
    #    [false, false, false, false, false], 
    #    [false, false, false, false, false], 
    #    [false, false, false, false, false], 
    #    [false, false, false, false, false]]
    
[/code]

**vs**

_Array.new(N, Array.new(N, false))_ :

[code]

    N = 5
    a_instant = Array.new(N, Array.new(N, false))
    a_instant[0][0] = true
    p a_instant
    
    # => [[true, false, false, false, false], 
    #    [true, false, false, false, false], 
    #    [true, false, false, false, false], 
    #    [true, false, false, false, false], 
    #    [true, false, false, false, false]]
    
[/code]

ドキュメントの以下の部分の解釈に注意して理解するようにしてください。 (以下の部分は itochan の回答を引用させてもらっています。)

> [_](http://docs.ruby-lang.org/ja/2.1.0/method/Array/s/new.html) 長さ size
> の配列を生成し、各要素のインデックスを引数としてブロックを実行し、 各要素の値をブロックの評価結果に設定します。

**vs**

> [_](http://docs.ruby-lang.org/ja/2.1.0/method/Array/s/new.html) 長さ size
> の配列を生成し、各要素を val で初期化して返します。

