From: sam.rawlins@... Date: 2014-03-10T16:37:24+00:00 Subject: [ruby-core:61404] [ruby-trunk - Feature #9602] Logic with `Enumerable#grep` Issue #9602 has been updated by Sam Rawlins. I've updated my patch with Array#select, nobu's `break` suggestion, and documentation and tests: * GitHub: https://github.com/srawlins/ruby/compare/select-to-accept-args * patch file: https://github.com/srawlins/ruby/compare/select-to-accept-args.patch If we want to go forward with this, I just need to do Enumerable#reject, Array#select!, Array#reject, Array#reject!, and I think Struct#select. I don't think this feature should be applied to Hash#select. ---------------------------------------- Feature #9602: Logic with `Enumerable#grep` https://bugs.ruby-lang.org/issues/9602#change-45713 * Author: Tsuyoshi Sawada * Status: Feedback * Priority: Normal * Assignee: Yukihiro Matsumoto * Category: * Target version: ---------------------------------------- `Enumerable#grep` is useful to filter things: [nil, {}, [], 1, :foo, "foo"].grep(String) # => ["foo"] 1. Often, the condition cannot be expressed as a single object on which `===` is applied, but as a disjunction over `===` applied to multiple objects. I would like `Enumerable#grep` to take arbitrary number of arguments, and when they are more than one, a logical disjunction applies, just as when there are multiple comma-separated objects after `when` in `case` condition: [nil, {}, [], 1, :foo, "foo"].grep(String, Symbol, Array) # => [[], :foo, "foo"] 2. Also, it often happens that I want the negation of grep. Perhaps, `Enumerable#grepv` (`grepv` comes from `grep -v`) can be implemented as negation of `Enumerable#grep`, i.e., select elements for which `===` returns false on any of the arguments: [nil, {}, [], 1, :foo, "foo"].grepv(String, Symbol, Array) # => [nil, {}, 1] ---Files-------------------------------- select-to-accept-args.patch (2.62 KB) -- http://bugs.ruby-lang.org/