Issue #12360 has been updated by Daniel Ferreira.


The principle of least surprise puts my mind expecting as a result the updated array.
A method to get both sides of the equation would make sense for me.
Something like:

~~~ ruby
Array#group

[1,2,3,4].group { |i| (-1)**i > 0 }
# => [[2,4], [1,3]]
~~~

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

* 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>