2

is it possible to do something like the following in Ruby?

hash = {:person => {:name => 'Bob', :age => 33}}
hash[:person] do |person|
    person[:name] = 'Alice'
    puts "Here, have a beer #{person[:name]}" if person[:age]> 17
end

What I'm trying to avoid is writing it like

hash[:person][:name] = 'Alice'
puts "Here, have a beer #{hash[:person][:name]}" if hash[:person][:age] > 17

Edit: My first example was a bit unclear maybe. I want to be able to execute some code in the block, not just update the values.

Erik Johansson
  • 1,188
  • 1
  • 8
  • 22

2 Answers2

3

You may want to look at the tap method.

hash = {:person => {:name => 'Bob', :age => 33}}
hash[:person].tap do |person_hash|
  person_hash[:name] = 'Alice'
  puts "Changed name"
end
blowmage
  • 8,854
  • 2
  • 35
  • 40
0
h[:person].each do |p|
  puts p[1]
end

#=> Bob
#=> 33

h[:person].each do |p|
  puts p[0]
end

#=> name
#=> age
Bala
  • 11,068
  • 19
  • 67
  • 120