使用块中的哈希单键处理

时间:2013-09-19 14:32:25

标签: ruby

可以在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

我想避免的是像

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

编辑: 我的第一个例子可能有点不清楚。我希望能够在块中执行一些代码,而不仅仅是更新值。

2 个答案:

答案 0 :(得分:3)

您可能需要查看tap方法。

hash = {:person => {:name => 'Bob', :age => 33}}
hash[:person].tap do |person_hash|
  person_hash[:name] = 'Alice'
  puts "Changed name"
end

答案 1 :(得分:0)

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

#=> Bob
#=> 33

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

#=> name
#=> age