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/