Issue #9223 has been updated by naruse (Yui NARUSE).


nobu (Nobuyoshi Nakada) wrote:
> (13/12/17 1:27), naruse (Yui NARUSE) wrote:
>  > +* Hash
>  > +  * incompatible changes:
>  > +    * Hash#reject now returns plain Hash object, that is the original object's
>  > +      subclass, instance variables, default value, and taintedness are no longer
>  > +      copied.
>  > 
>  > but test/ruby/test_hash.rb checks
>  > 
>  > assert_instance_of(Hash, h)
>  
>  Right.
>  The result of Hash#reject is always an instance of Hash, not SubHash, now.
>  
>  Better descriptions are always welcome, of course.

The change (SubClass) is not allowed for 2.1 because it breaks HashWithDifferentAccess.
----------------------------------------
Bug #9223: Hash#reject!.size does not reflect changes to the hash
https://bugs.ruby-lang.org/issues/9223#change-43716

Author: dmarcotte (Daniel Marcotte)
Status: Assigned
Priority: Immediate
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: current: 2.1.0
ruby -v: ruby 2.0.0p353
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


Here's an example demonstrating the issue, comparing to the regular reject behavior:  

h = {a: 'A', b: 'B'}
reject_enum = h.reject
reject_bang_enum = h.reject!
h[:c] = 'C'
p reject_enum.size # 3
p reject_bang_enum.size # 2



-- 
http://bugs.ruby-lang.org/