Вы можете использовать встроенный рубин tap
:
Hash.new.tap do |hash|
hash.merge! a: 1
end
Это даже может быть "злоупотреблено" для нескольких объектов:
[one_long_name, another_long_name].tap do |(a,b)|
a.prop = b.prop
end
Конечно, оба не дают вамименно то, что with
будет делать в соответствии с вашим примером: блок не будет оцениваться в экземпляре объекта.Но я предпочитаю много использовать tap
с несколькими объектами, плюс tap
return self
, поэтому его можно объединить в цепочку:
[one_long_name, another_long_name].tap {|(a,b)| a.prop = b.prop }.inspect