16

所以我试图取两个数组ab返回第三个数组,使得第三个数组的第n元素是数组的第na元素的和b。我正在研究#zip交错数组的方法,例如 ifa = [1, 2, 3]b = [4, 5, 6] a.zip(b) = [[1, 4], [2, 5], [3, 6]]. ruby-doc.org 说如果给出了一个块,它会为每个输出数组调用......虽然搞砸了它,但我发现了一些有趣的东西。如果你用一个块调用 zip,它似乎总是返回 nil。我在这里做错了吗?

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 回答