В Ruby 1.9 (или с загруженным ActiveSupport, например, в Rails) вы можете использовать Object#tap
, например:
foo = Hash.new.tap do |bar|
bar[:baz] = 'qux'
end
Вы можете передать блок в Hash.new
, но это служит для определениязначения по умолчанию:
foo = Hash.new { |hsh, key| hsh[key] = 'baz qux' }
foo[:bar] #=> 'baz qux'
Для чего бы это ни стоило, я предполагаю, что вы имеете в виду более крупную цель с этим блоком.Синтаксис { :foo => 'bar', :baz => 'qux' }
может быть всем, что вам действительно нужно.