#each_with_object и #inject можно использовать для создания хэша.
Например:
matrix = [['foo', 'bar'], ['cat', 'dog']]
some_hash = matrix.inject({}) do |memo, arr|
memo[arr[0]] = arr
memo # no implicit conversion of String into Integer (TypeError) if commented out
end
p some_hash # {"foo"=>["foo", "bar"], "cat"=>["cat", "dog"]}
another_hash = matrix.each_with_object({}) do |arr, memo|
memo[arr[0]] = arr
end
p another_hash # {"foo"=>["foo", "bar"], "cat"=>["cat", "dog"]}
Одно из ключевых различий между ними заключается в том, что #each_with_object
отслеживает memo
на протяжении всей итерации, а #inject
устанавливает memo
равным значению, возвращаемому блоком на каждой итерации.
Другим отличием является порядок или параметры блока.
Есть ли какое-то намерение, о котором здесь сообщается? Не имеет смысла менять местами параметры блоков двух похожих методов.