Синтаксис для метода ввода следующий:
inject (value_initial) { |result_memo, object| block }
Давайте решим приведенный выше пример, т.е.
[1, 2, 3, 4].inject(0) { |result, element| result + element }
, который дает 10 в качестве вывода.
Итак, перед тем как начать, давайте посмотрим, какие значения хранятся в каждой переменной:
результат = 0 Ноль пришел от inject (значение), которое составляет 0
element = 1 Это первый элемент массива.
Окей !!! Итак, давайте начнем понимать приведенный выше пример
Шаг: 1 [<b><i>1</i></b>, 2, 3, 4].inject(<b>0</b>) { |<b>0</b>, <i><b>1</b></i>| <b>0</b> + <i><b>1</b></i> }
Шаг: 2 [1, <b><i>2</i></b>, 3, 4].inject(0) { |<b>1</b>, <b><i>2</i></b>| <b>1</b> + <b><i>2</i></b> }
Шаг: 3 [1, 2, <b><i>3</i></b>, 4].inject(0) { |<b>3</b>, <b><i>3</i></b>| <b>3</b> + <b><i>3</i></b> }
Шаг: 4 [1, 2, 3, <b><i>4</i></b>].inject(0) { |<b>6</b>, <b><i>4</i></b>| <b>6</b> + <b><i>4</i></b> }
Шаг: 5 [1, 2, 3, 4].inject(0) { |<b>10</b>, <b><i>Now no elements left in the array, so it'll return 10 from this step</i></b>| }
Здесь Полужирный курсив значения - это элементы, извлекаемые из массива, а просто значения Полужирный - результирующие значения.
Надеюсь, вы понимаете, как работает #inject
метод #ruby
.