Issue #9223 has been updated by nobu (Nobuyoshi Nakada).


Seems inverse.

Hash#reject is equivalent to the following ruby code:

  def reject(&block)
    dup.delete_if(&block)
  end

That is, the change on the original receiver can't affect the result.

----------------------------------------
Bug #9223: Hash#reject!.size does not reflect changes to the hash
https://bugs.ruby-lang.org/issues/9223#change-43478

Author: dmarcotte (Daniel Marcotte)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
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/