Project

General

Profile

Actions

Feature #12318

closed

Returning the evaluated value of a block

Feature #12318: Returning the evaluated value of a block

Added by sawa (Tsuyoshi Sawada) over 9 years ago. Updated almost 8 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:75183]

Description

I often achieve an element using an iterator with a block, and then apply the same/a similar block to the element I get. Examples are:

[7, 8, 9]
.max_by{|e| e % 3}
.tap{|e| break e % 3}
# => 2

["foo", "bar", "baz"]
.find{|e| e[/(.)\1/]}
.tap{|e| break e[/(.)\1/]}
# => "oo"

I would like a method on Enumerator that returns the result of the block rather than the original element in the iterator. Not sure about the name, but if I call it and_return temporary, it should look like:

[7, 8, 9]
.max_by.and_return{|e| e % 3}
# => 2

["foo", "bar", "baz"]
.find.and_return{|e| e[/(.)\1/]}
# => "oo"

Updated by nobu (Nobuyoshi Nakada) over 9 years ago Actions #1 [ruby-core:75185]

It doesn't seem generic enough to be defined in Enumerator.
The receiver enumerator may return different object than its elements nor the results of the given block, whereas that and_return has to manage the association of them.

Why not simpler:

[7, 8, 9].map {|e| e % 3}.max
# => 2
["foo", "bar", "baz"].find {|e| break e if e = e[/(.)\1/]}
# => "oo"

or

["foo", "bar", "baz"].grep(/(.)\1/) {break $&}
# => "oo"

Updated by avit (Andrew Vit) almost 8 years ago Actions #2 [ruby-core:84384]

This is now implemented as yield_self

Close please?

Updated by shyouhei (Shyouhei Urabe) almost 8 years ago Actions #3 [ruby-core:84386]

  • Status changed from Open to Closed

avit (Andrew Vit) wrote:

This is now implemented as yield_self

Close please?

Yes. Closing.

Actions

Also available in: PDF Atom