次のような配列を定義しました。
ary = [[0,1], [2,3]]
次のコードを実行します。
ary.reduce(nil) do |a, i, k|
puts "#{a.inspect} #{i.inspect} #{k.inspect}"
end
各反復で、変数a
、i
、およびk
がそれぞれアキュムレータ ( nil
) の値、内部配列の最初の要素、および 2 番目の要素を保持することを期待します。つまり、次の出力が期待されます。
nil 0 1
nil 2 3
しかし、代わりに結果は次のようになります。
nil [0, 1] nil
nil [2, 3] nil
なんで?望む結果を得るにはどうすればよいですか?
さらに、次のコードを使用するmap
と、期待どおりに機能するのはなぜですか?
ary.map do |i, k|
puts "#{i.inspect} #{k.inspect}"
end
# Output
# 0 1
# 2 3
違いはなんですか?