Подтвердить что ты не робот

Почему вызов zip на массив с блоком всегда возвращает nil

Итак, я пытался взять два массива a и b вернуть третий массив таким образом, чтобы элемент n th третьего массива был суммой n th элементов массивов a и b. Я смотрел на метод #zip, который чередует массивы так, что если a = [1, 2, 3] и b = [4, 5, 6] a.zip(b) = [[1, 4], [2, 5], [3, 6]]. ruby-doc.org говорит, что если задан блок, он вызывается для каждого выходного массива... Хотя он возился с ним, я нашел что-то интересное. Если вы вызываете zip с блоком, он всегда возвращает нуль. Я здесь что-то не так?

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

возвращает nil

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

возвращает желаемый результат

4b9b3361

Ответ 1

Нет

К лучшему или к худшему, как это работает. Он либо возвращает результат, либо возвращает его в блок; он не делает того и другого.

Кстати, в вашем примере a.zip(b) на самом деле [[1, 4], [2, 5], [3, 6]].

Ответ 2

В документации по Array # zip указано, что если задан блок, возвращается nil.