Project

General

Profile

Actions

Bug #2764

closed

Hash.new inconsistency when initialized with an enumerable

Added by florent (Florent Vaucelle) over 14 years ago. Updated over 13 years ago.

Status:
Rejected
Assignee:
-
ruby -v:
ruby 1.8.7 (2009-04-08 patchlevel 160) [i686-darwin9]
[ruby-core:28252]

Description

=begin
When initializing a Hash with an enumerable as default value, Hash.new(obj) and Hash.new(&block) have different behaviours.

Example:
h = Hash.new([])
h[10] << 20
h #=> {}

h = Hash.new { |hash, key| hash[key] = [] }
hash[10] << 20
h #=> {10=>20}

The example similar when using a String instead of an Array as default value.
=end

Actions #1

Updated by marcandre (Marc-Andre Lafortune) over 14 years ago

  • Category set to core
  • Status changed from Open to Rejected

=begin
This is by design.

Note that the behavior is actually different for all types of objects, even immediates

h = Hash.new(42)
h[:foo] # ==> 42
h.keys # ==> []

h = Hash.new { |hash, key| hash[key] = 42 }
h[:foo] # ==> 42
h.keys # ==> [:foo]

=end

Actions

Also available in: Atom PDF

Like0
Like0