ActionsLike0
Feature #18950
openHash#slice fails to copy default block
Status:
Open
Assignee:
-
Target version:
-
Description
An intense weekend debugging session discovered the following root cause of a bug: Hash#slice
returns a new Hash, which has no default block set, even if the source Hash did have a default block set.
Simplified code to reproduce:
# Default to an empty hash for all accessed keys
hash_with_default = Hash.new { |h, k| h[k] = {} } # => {}
hash_with_default[:a] # => {}
hash_with_default[:b] # => {}
hash_with_default # => {:a=>{}, :b=>{}}
# Later, use Hash#slice
hash_sliced = hash_with_default.slice(:a, :b) # => {:a=>{}, :b=>{}}
# Finally, access a new key
hash_sliced[:c] # => nil
# Error -- that was expected to call the default block
raise "No default value" unless hash_sliced[:c] == {}
Updated by jeremyevans0 (Jeremy Evans) over 2 years ago
- Tracker changed from Bug to Feature
- ruby -v deleted (
2.7.6) - Backport deleted (
2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN)
ActionsLike0