Что делаетeach_with_object в Ruby

Что делает каждый_с_объектом? Где он получает выбор? https://github.com/bodrovis/lokalise_manager/blob/master/lib%2Flokalise_manager%2Ftask_definitions%2Fbase.rb#L23

primary_opts = global_config
                 .singleton_methods
                 .filter { |m| m.to_s.end_with?('=') }
                 .each_with_object({}) do |method, opts|
  reader = method.to_s.delete_suffix('=')
  opts[reader.to_sym] = global_config.send(reader)
end
# *your text*

Попробовал просмотреть заднюю документацию на сайте Ruby.

🤔 А знаете ли вы, что...
Ruby популярен в мире искусственного интеллекта и машинного обучения.


85
1

Ответ:

Решено

each_with_object повторяет перечисляемое таким же образом, как и each.

Но позволяет передать в блок дополнительный объект (например, пустой хэш в этом примере) и возвращает этот объект в конце (а не итератор, как это сделал бы each).

Это упрощенный пример. Вместо

hash = {}
[1, 2, 3].each do |number|
  hash[number] = number * number
end
hash
#=> { 1 => 1, 2 => 4, 3 => 9 }

each_with_object позволяет написать:

[1, 2, 3].each_with_object({}) do |number, hash|
  hash[number] = number * number
end
#=> { 1 => 1, 2 => 4, 3 => 9 }