为什么在带有块的数组上调用zip总是返回nil

时间:2012-06-08 23:28:04

标签: ruby arrays

所以我试图取两个数组ab返回第三个数组,以便第三个数组的 n th 元素是数组ab n th 元素的总和。我正在查看交换数组的#zip方法,以便a = [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(:+) }

返回所需的结果

2 个答案:

答案 0 :(得分:6)

无论好坏,这就是它的运作方式。它要么返回结果将它产生到块中;它不能同时做到这两点。

顺便说一句,在您的示例中,a.zip(b)实际上是[[1, 4], [2, 5], [3, 6]]

答案 1 :(得分:4)

Array#zip上的文档指出,如果给出一个块,则返回nil。