Skip to main content

fetch_with_block_defaults

🎛️ fetch with Blocks vs Default Values

Hash#fetch lets you distinguish missing keys from nil values and lazily compute defaults. Using a block avoids creating unused defaults up‐front.

h = {a: 1}

# Default argument (eager)
def_value = h.fetch(:b, expensive_computation)
# expensive_computation runs even if :b exists

# Block form (lazy)
lazy_value = h.fetch(:b) { expensive_computation }
# expensive_computation only runs if :b missing

# Handling nil vs missing
h[:c] = nil
h.fetch(:c, 'default') # => nil (key exists)
h.fetch(:d, 'default') # => "default" (key missing)