From: Rodrigo Rosenfeld Rosas Date: 2011-11-29T20:32:01+09:00 Subject: [ruby-core:41391] [ruby-trunk - Feature #5663] Combined map/select method Issue #5663 has been updated by Rodrigo Rosenfeld Rosas. Hi Alexey, Yes, I know about this. What Jos�� Valim suggested (well, he actually wondered, since he doesn't believe this could be changed in Ruby due to the large existent code base) was the removal of the block concept. From what I've understood, the block syntax would actually create a proc (or a lambda) that would be passed as a parameter. And I also find this less confusing, with the similar callable approach taken by C, JavaScript, Python and most languages out there I guess. ---------------------------------------- Feature #5663: Combined map/select method http://redmine.ruby-lang.org/issues/5663 Author: Yehuda Katz Status: Open Priority: Normal Assignee: Category: lib Target version: 2.0.0 It is pretty common to want to map over an Enumerable, but only include the elements that match a particular filter. A common idiom is: enum.map { |i| i + 1 if i.even? }.compact It is of course also possible to do this with two calls: enum.select { |i| i.even? }.map { |i| i + 1 } Both cases are clumsy and require two iterations through the loop. I'd like to propose a combined method: enum.map_select { |i| i + 1 if i.even? } The only caveat is that it would be impossible to intentionally return nil here; suggestions welcome. The naming is also a strawman; feel free to propose something better. -- http://redmine.ruby-lang.org