Это скорее ответ на отрицание предположения вашего вопроса, а также чтобы убедиться, что это.
Метод each_with_object
сохраняет ваши дополнительные нажатия клавиш.Предположим, вам нужно создать хеш из массива.С inject
вам понадобится дополнительный h
в следующем:
array.inject({}){|h, a| do_something_to_h_using_a; h} # <= extra `h` here
, но с each_with_object
вы можете сохранить этот набор:
array.each_with_object({}){|a, h| do_something_to_h_using_a} # <= no `h` here
Так что это хорошоиспользовать его, когда это возможно.Но есть ограничение.Как я также ответил здесь ,
Когда начальный элемент является изменяемым объектом, таким как Array
, Hash
, String
, вы можете использовать each_with_object
.
Когда начальный элемент является неизменяемым объектом, таким как Numeric
, вы должны использовать inject
какниже.
sum = (1..10) .inject (0) {| sum, n |сумма + n} # => 55