From: "Eregon (Benoit Daloze)" Date: 2021-11-29T14:00:33+00:00 Subject: [ruby-core:106312] [Ruby master Feature#18366] Enumerator#return_eval Issue #18366 has been updated by Eregon (Benoit Daloze). I would advise against making Enumerable methods more complex with additional arguments, it'll only make them slower or more complicated to JIT compile, in addition to making their role less clear. How would `return_eval` work? Could you write it in Ruby or as pseudo-code? ---------------------------------------- Feature #18366: Enumerator#return_eval https://bugs.ruby-lang.org/issues/18366#change-94940 * Author: sawa (Tsuyoshi Sawada) * Status: Open * Priority: Normal ---------------------------------------- Some `Enumerable` methods return one or more of the receiver's elements according to the return value of a block it takes. Often, we want such evaluated value rather than the original element. For example, suppose we want to know the character width sufficient to fit all the strings in an array: ```ruby a = ["Hello", "my", "name", "is", "Ruby"] ``` We either have to repeat the evaluation of the block: ```ruby a.max_by(&:length).length # => 5 ``` or create a temporal array: ```ruby a.map(&:length).max # => 5 ``` both of which seem not to be optimal. I propose to have a method `Enumerator#return_eval` that returns the evaluated value(s) of the block: ```ruby a.max_by.return_eval(&:length) # => 5 a.min_by.return_eval(&:length) # => 2 a.minmax_by.return_eval(&:length) # => [2, 5] ["Ava Davidson", "Benjamin Anderson", "Charlie Baker"] .sort_by.return_eval{_1.split.reverse.join(", ")} # => ["Anderson, Benjamin", "Baker, Charlie", "Davidson, Ava"] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: