From: "marcandre (Marc-Andre Lafortune)" Date: 2013-06-03T05:08:56+09:00 Subject: [ruby-core:55261] [ruby-trunk - Feature #8478] The hash returned by Enumerable#group_by should have an empty array for its default value Issue #8478 has been updated by marcandre (Marc-Andre Lafortune). I understand the idea, but there are problems with this. First of, it's a really bad idea to set the default of a hash to a mutable object: a = [1, 2, 3, "a", "b"] g = a.group_by {|o| o.class } g[Array] << [:foo] g[Hash] # => [[:foo]], you expected [] Assuming now that your request was instead to change the default proc to {|hash, key| hash[key] = []}, which would not cause the problem above, you still have the problem of incompatibility. ---------------------------------------- Feature #8478: The hash returned by Enumerable#group_by should have an empty array for its default value https://bugs.ruby-lang.org/issues/8478#change-39655 Author: phiggins (Pete Higgins) Status: Open Priority: Normal Assignee: Category: Target version: Without this patch, nil checks might need to be done on the return value of Enumerable#group_by: $ cat test_group_by.rb a = [1, 2, 3, "a", "b"] g = a.group_by {|o| o.class } puts "Fixnums: #{g[Fixnum].size}" puts "Strings: #{g[String].size}" puts "Arrays: #{g[Array].size}" $ ruby test_group_by.rb Fixnums: 3 Strings: 2 test_group_by.rb:6:in `
': undefined method `size' for nil:NilClass (NoMethodError) This patch adds a default value of an empty array to the hash returned by Enumerable#group_by, so the script above will work: $ ./ruby -I.:lib test_group_by.rb Fixnums: 3 Strings: 2 Arrays: 0 -- http://bugs.ruby-lang.org/