Вы можете использовать #tap
для этого, но вам нужно вывернуть проблему наизнанку. Вы хотите получить ha sh, а x.tap { ... }
возвращает x
, поэтому x
будет ha sh, которое вы хотите вернуть. Таким образом, вы можете сказать {}.tap { |h| ... }
и позволить блоку заполнить h
желаемым форматом:
def user_data(u_data)
{}.tap do |h|
u_data.each do |u|
h[u['id']] = u
end
end
end
Это довольно неприятно, и я надеюсь, что никто не сделает это в реальном коде.
Лучше использовать текущий подход #to_h
или, возможно, использовать #each_with_object
:
def user_data(u_data)
u_data.each_with_object({}) { |u, h| h[u['id']] = u }
end
или, что ближе к исходному, [#to_h
] [2] с блоком:
def user_data(u_data)
u_data.to_h { |u| [u['id'], u] }
end