Как сложить массив чисел в Ruby?

Важно понимать, что () является оператором, как + или &&. () Выполняет функцию и вызывает ее.

Итак, в этом случае doThis является функциональным объектом, а () - оператором, вызывающим функцию. doThis(), объединенный вместе, вызывает doThis, выполняет его и оценивает возвращаемое значение doThis

. Таким образом, window.onload = doThis() в основном присваивает возвращаемое значение от doThis до window.onload

И, таким образом, чтобы исправить это, вам нужно обратиться к самой функции, а не вызвать ее.

Do window.onload = doThis

548
задан Mab879 22 February 2014 в 03:11
поделиться

5 ответов

Попробуйте следующее:

array.inject(0){|sum,x| sum + x }

См. Перечисляемую документацию Ruby

(примечание: необходим базовый вариант 0 , чтобы 0 возвращался в пустом массиве вместо nil )

599
ответ дан 22 November 2019 в 22:18
поделиться

3 путями мы можем сделать сумму массива

1) array.inject(0){|sum,x| sum + x }

2) array.inject('+')

3) array.join('+')

0
ответ дан 22 November 2019 в 22:18
поделиться

Или попробуйте способ Ruby 1.9:

array.inject(0, :+)

Примечание: необходим базовый вариант 0 , иначе nil будет возвращен для пустых массивов:

> [].inject(:+)
nil
> [].inject(0, :+)
0
794
ответ дан 22 November 2019 в 22:18
поделиться

Для Ruby > = 2.4.0 вы можете использовать sum из Enumerables.

[1, 2, 3, 4].sum

Базовые классы mokeypatch опасны. Если вам нравится опасность и вы используете старую версию Ruby, вы можете добавить #sum в класс Array :

class Array
  def sum
    inject(0) { |sum, x| sum + x }
  end
end
61
ответ дан 22 November 2019 в 22:18
поделиться

В качестве альтернативы (для сравнения), если у вас установлен Rails (на самом деле только ActiveSupport):

require 'activesupport'
array.sum
110
ответ дан 22 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: