Issue #12360 has been updated by Nobuyoshi Nakada.


I think this proposal is to change the return value *if* actual rejection happened, but not the case nothing was rejected, and the result doesn't need to be `self` to know if it happened or not.

A drawback is a cost to create an array always even if it is not used.

----------------------------------------
Feature #12360: More useful return values from bang methods
https://bugs.ruby-lang.org/issues/12360#change-58552

* Author: Thomas Sawyer
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
It would be nice if bang methods returned results that where of some additional use. Presently most just return the effected receiver.

For example, currently Array#reject! works as follows:

    a = [1,2,3,4]
    a.reject!{ |x| x % 2 == 0 }
    => [2,4]
    a
    => [2,4]

So the return value of #reject! is useless b/c it is just the same as `a` (in this example). So why not return what was rejected instead:

    a = [1,2,3,4]
    a.reject!{ |x| x % 2 == 0 }
    => [1,3]
    a
    => [2,4]

Now we have useful additional information -- we know exactly what got rejected. To do the same thing presently we would have to fully duplicate the original array and then take the difference -- two extra steps.

The downside is that the method would consume a little more memory and probably slow the method's execution a little too. But I tend to side with functionality when I use Ruby.





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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>