From: shannonskipper@... Date: 2015-03-06T20:06:48+00:00 Subject: [ruby-core:68447] [Ruby trunk - Feature #10883] Passing a block to itself 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/