Skip to content

Instantly share code, notes, and snippets.

@stevenharman
Last active July 7, 2021 14:36
Show Gist options
  • Save stevenharman/5664318 to your computer and use it in GitHub Desktop.
Save stevenharman/5664318 to your computer and use it in GitHub Desktop.
A subtle difference between Ruby's Hash.fetch(:key, :default) vs. (Hash[:key] || :default)
h = {
'a' => :a_value,
'b' => nil,
'c' => false
}
h.fetch('a', :default_value) #=> :a_value
h.fetch('b', :default_value) #=> nil
h.fetch('c', :default_value) #=> false
h.fetch('d', :default_value) #=> :default_value
(h['a'] || :default_value) #=> :a_value
(h['b'] || :default_value) #=> :default_value
(h['c'] || :default_value) #=> :default_value
(h['d'] || :default_value) #=> :default_value
@gat-bryszard
Copy link

gat-bryszard commented Mar 24, 2021

You can get exactly same result if you do Hash.fetch(:key, ::default_value) || :default_value.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment