[#68478] Looking for MRI projects for Ruby Google Summer of Code 2015 — Tony Arcieri <bascule@...>

Hi ruby-core,

10 messages 2015/03/10

[ruby-core:68447] [Ruby trunk - Feature #10883] Passing a block to itself

From: shannonskipper@...
Date: 2015-03-06 20:06:48 UTC
List: ruby-core #68447
Issue #10883 has been updated by Shannon Skipper.


I think having a block form of #itself would be great. Here's a highly contrived example:

~~~
(("123".to_i - 3).to_s.reverse.to_i * 2).to_s
#=> "42"
~~~

Instead of nested parens, the following reads left to right:

~~~
"123".to_i.itself { |n| n - 3 }.to_s.reverse.to_i.itself { |n| n * 2 }.to_s
#=> "42"
~~~

It also allows a variety of other niceties:

~~~
["Hello", "Word"].itself { |greeting, subject| "#{greeting}... #{subject}!!" }
#=> "Hello... Word!!"
~~~

So like #tap except it returns itself instead of just tapping in.

----------------------------------------
Feature #10883: Passing a block to itself
https://bugs.ruby-lang.org/issues/10883#change-51795

* Author: Damien Robert
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
In the discussion of [itself](https://bugs.ruby-lang.org/issues/6373)
some people proposed that passing a block to itself could return the value of the block:

~~~
def itself
  if block_given?
    yield self
  else
    self
  end
end
~~~

It would be very usefull in method chains

~~~~
#this would allow
an_array.foo.bar.itself {|x| x[1..x.length-1]}.baz
#which flows better than
a=an_array.foo.bar
a[1..a.length-1].baz
~~~~



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

In This Thread

Prev Next