From: shibata.hiroshi@... Date: 2015-01-08T00:02:10+00:00 Subject: [ruby-core:67413] [ruby-trunk - Bug #10713] [Rejected] Assigning default value for a Hash as an empty Array creating unpredictable results Issue #10713 has been updated by Hiroshi SHIBATA. Status changed from Open to Rejected It's expected behavior ---------------------------------------- Bug #10713: Assigning default value for a Hash as an empty Array creating unpredictable results https://bugs.ruby-lang.org/issues/10713#change-50845 * Author: Arvinder Singh * Status: Rejected * Priority: Normal * Assignee: * Category: core * Target version: current: 2.2.0 * ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Creating a Hash with a default value works fine, unless the default value is an empty Array. E.g. the following returns an empty Hash... ~~~ irb(main):001:0> letters = Hash.new([]) => {} irb(main):002:0> letters[:a] << 1 => [1] irb(main):003:0> letters[:a] << 2 => [1, 2] irb(main):004:0> letters[:a] => [1, 2] irb(main):005:0> letters => {} ~~~ whereas the following code explicitly defining hash keys works. ~~~ irb(main):001:0> letters = {a: [], b: []} => {:a=>[], :b=>[]} irb(main):002:0> letters[:a] << 1 => [1] irb(main):003:0> letters[:a] << 2 => [1, 2] irb(main):004:0> letters[:a] => [1, 2] irb(main):005:0> letters => {:a=>[1, 2], :b=>[]} ~~~ Is this an unpredictable(bug) or an expected behavior(feature). I tend to lean towards the former, but I might be wrong. -- https://bugs.ruby-lang.org/