Hash.newとした時は存在しないキーの値を得ようとしたときのデフォルト値を設定することができます。
ruby
1a = Hash.new('test')
2a[:a]
3#=> "test"
4a[:b]
5#=> "test"
6
7a = {}
8a[:a]
9#=> nil
10a[:b]
11#=> nil
ブロックを渡すと処理を行いデフォルト値をセットすることもできます
ruby
1hash = Hash.new do |hsh, key|
2 hsh[key] = key.upcase
3end
4
5hash['a']
6hash['b']
7p hash
8#=> {"a"=>"A", "b"=>2}
余談ですが、{}の方で定義した際にも、default=メソッドを使用することで、あとからデフォルト値を設定することもできます。
a = {}
a[:a]
#=> nil
a.default = "test"
a[:a]
#=> "test"