誰かが何がここで起こっているのを教えてください:学習ルビー:ブロック虐待を経由して作る無限次元配列
a = [0,1,2]
a.each {|x| a[x] = a}
結果は[[...], [...], [...]]
です。 a[0]
と評価した場合は[[...], [...], [...]]
となります。 a[0][0]
と評価した場合、私は[[...], [...], [...]]
を無期限に受け取ります。
無限次元の配列を作成しましたか?どのように/なぜこれはおそらく機能するはずですか?
なぜですか?位置a [x]にはaを見つけることができます。これは[x]をもう一度呼び出すことができます。次元性は常に直交性とも関係します。この前提はここでは示されていません。 – flq
これはブロックとは関係がないことに注意してください。 'a = []; a [0] = a; a [1] = a; a [2] = a'はまったく同じ結果になります。 – sepp2k
ブロックを使用すると、無限次元の配列を実際に(あまり)作成することはできません。 'blk = proc {| i | Array.new(10、&blk)}; a = Array.new(10、&blk) '。これは、Rubyが無限再帰を処理できないため、SystemStackErrorを引き起こします。 – Nemo157