所以我试图取两个数组a
和b
返回第三个数组,以便第三个数组的 n th 元素是数组a
和b
的 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(:+) }
返回所需的结果
答案 0 :(得分:6)
无论好坏,这就是它的运作方式。它要么返回结果或将它产生到块中;它不能同时做到这两点。
顺便说一句,在您的示例中,a.zip(b)
实际上是[[1, 4], [2, 5], [3, 6]]
。
答案 1 :(得分:4)
Array#zip上的文档指出,如果给出一个块,则返回nil。