Hash#fetch
é mais estrito sobre a presença chave do que Hash#[]
{}[:foo]
=> nil
{}.fetch(:foo)
KeyError: key not found: :foo
Se você esquecer de definir uma ENV
variável da qual seu código depende, prefere que ele falhe tarde ou imediatamente?
ENV['TWITTER_OAUTH_TOKEN']
=> nil
ENV.fetch('TWITTER_OAUTH_TOKEN')
KeyError: key not found
É especialmente interessante quando uma chave com um padrão verdadeiro é explicitamente configurada com um valor falso:
options = {on: false}
@on = options[:on] || true
=> true # yikes, ever fallen into this trap?
@on = options.fetch(:on, true)
=> false