Algumas vantagens:
1) Depuração mais fácil
Você obtém a exceção KeyError imediatamente ao tentar acessar o valor de hash que não foi definido, em vez de passar nil para o seu código e depurar o “método X indefinido para nil: NilClass”
2) Vamos especificar o valor padrão
h.fetch("username", "guest")
#=> "guest"
h.fetch("username") { |key| "#{key} is not set"}
#=> "username is not set"
Baseado no artigo da 8th Light