16

そのため、2 つの配列を取得して、3 番目の配列のn 番目の要素が配列の n番目要素との合計になるように 3 番目の配列ab返そうとしました。ifとのように配列をインターリーブする方法を見ていました。ruby-doc.org は、ブロックが与えられた場合、出力配列ごとに呼び出されると言っています...いじりながら、面白いものを見つけました。ブロックで zip を呼び出すと、常に nil が返されるようです。ここで何か間違ったことをしていますか?ab#zipa = [1, 2, 3]b = [4, 5, 6] a.zip(b) = [[1, 4], [2, 5], [3, 6]]

c = a.zip(b) { |x| x.reduce(:+) }

戻り値nil

c = a.zip(b).map { |x| x.reduce(:+) }

望ましい結果を返します

4

2 に答える 2

7

いいえ

良くも悪くも、それがまさにその仕組みです。結果を返す、ブロックに渡します。両方を行うわけではありません。

ちなみに、あなたの例a.zip(b)では実際には[[1, 4], [2, 5], [3, 6]]です。

于 2012-06-08T23:48:10.607 に答える
4

Array#zipのドキュメントには、ブロックが指定された場合、nilが返されると記載されています。

于 2012-06-08T23:51:32.753 に答える