2

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

編集:私の最初の例は少し不明確だったかもしれません。値を更新するだけでなく、ブロック内のコードを実行できるようにしたいと考えています。

4

2 に答える 2

3

タップメソッドを参照することをお勧めします。

hash = {:person => {:name => 'Bob', :age => 33}}
hash[:person].tap do |person_hash|
  person_hash[:name] = 'Alice'
  puts "Changed name"
end
于 2013-09-19T15:02:36.263 に答える
0
h[:person].each do |p|
  puts p[1]
end

#=> Bob
#=> 33

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

#=> name
#=> age
于 2013-09-19T14:48:17.367 に答える