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

File 0001-Hash-store-return-old-value.patch added

rosenfeld (Rodrigo Rosenfeld Rosas) wrote:
> > And, what should be returned if the key wasn't set?
> 
> Its default value?

Also calling its default proc?

MartinBosslet (Martin Bosslet) wrote:
> Seems reasonable to me. To detect whether a key hasn't been set yet,
> one would check for the presence of the default value. That
> doesn't catch cases where a key with a default value is actually
> set, but that seems fine to me. Voices against this?

Calling default proc can be expensive.  So I don't think it's good idea to call it always.
A patch to separate Hash#store from Hash#[]=, and let it return the old value.

----------------------------------------
Feature #6219: Return value of Hash#store
https://bugs.ruby-lang.org/issues/6219#change-25391

Author: MartinBosslet (Martin Bosslet)
Status: Assigned
Priority: Low
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 3.0


Hash#store returns the value that was just assigned, for example:

  h[:a] = b # => b

Does anyone rely on this behavior, are there cases when this becomes handy?

If however the return value is discarded most of the time, I was thinking it 
might be beneficial if we would return the previous value of a given key (nil if
none was assigned yet) instead. That way we could assign and check for a collision
in one pass, something that right now can only be done in two separate steps.




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