2009/10/30 7stud -- <bbxx789_05ss / yahoo.com>: > shenry wrote: >> I'd like to avoid using strings as the keys in >> my default hash. >> > > h1 = ¨Â ºîáí½¾ ¢Êï墬 ºáçå ½¾ µ° > h2 = { "name" => "Bill", :phone => "123-4567"} > > h2.each do |key, val| > ¨Â±Ûëåù®ôïßóùíöá> end > > p h1 > > --output:-- > {:age=>50, :phone=>"123-4567", :name=>"Bill"} Typically you do not want to modify defaults so I'd probably do irb(main):001:0> default = { :name => "Joe", :age => 50 }.freeze => {:name=>"Joe", :age=>50} irb(main):002:0> params = { "name" => "Bill" } => {"name"=>"Bill"} irb(main):003:0> new_hash = default.dup => {:name=>"Joe", :age=>50} irb(main):004:0> params.each {|k,v| new_hash[k.to_sym]=v} => {"name"=>"Bill"} irb(main):005:0> new_hash => {:name=>"Bill", :age=>50} If you are allowed to change params you could do irb(main):001:0> default = { :name => "Joe", :age => 50 }.freeze => {:name=>"Joe", :age=>50} irb(main):002:0> params = { "name" => "Bill" } => {"name"=>"Bill"} irb(main):003:0> default.each {|k,v| params[k.to_s] ||= v} => {:name=>"Joe", :age=>50} irb(main):004:0> params => {"name"=>"Bill", "age"=>50} Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/