From: nobu@... Date: 2016-04-26T02:27:31+00:00 Subject: [ruby-core:75185] [Ruby trunk Feature#12318] Returning the evaluated value of a block Issue #12318 has been updated by Nobuyoshi Nakada. 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: ```ruby [7, 8, 9].map{|e| e % 3}.max # => 2 ``` ```ruby ["foo", "bar", "baz"].find{|e| break e if e = e[/(.)\1/]} # => "oo" ``` or ```ruby ["foo", "bar", "baz"].grep(/(.)\1/) {break $&} # => "oo" ``` ---------------------------------------- Feature #12318: Returning the evaluated value of a block https://bugs.ruby-lang.org/issues/12318#change-58316 * Author: Tsuyoshi Sawada * Status: Open * Priority: Normal * Assignee: ---------------------------------------- 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: ~~~ruby [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: ~~~ruby [7, 8, 9] .max_by.and_return{|e| e % 3} # => 2 ["foo", "bar", "baz"] .find.and_return{|e| e[/(.)\1/]} # => "oo" ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: