Feature #9347
openAccept non callable argument to detect
Description
Currently, the only argument that Enumerable#detect
accepts is a callable object.
Shouldn't we accept non callable objects too?
[42].detect(:not_found){} # => NoMethodError: undefined method `call' for :not_found:Symbol
# would return :not_found instead.
I'd suggest that if the given argument does not respond_to? :call
, then it would be returned as is instead of raising an error as currently.
Wouldn't this be more flexible and possibly more performant?
Inspired by http://stackoverflow.com/questions/20883414/why-does-enumerabledetect-need-a-proc-lambda
Updated by matz (Yukihiro Matsumoto) almost 11 years ago
I am afraid that kind of conditional behavior could error prone (e.g. accidental misbehavior when one forget having #call in argument object). I'd rather have #detect with keyword argument, like ary.detect(ifnone: :notfound).
Matz.
Updated by fuadksd (Fuad Saud) almost 11 years ago
I think, if it was possible, a call like this ary.detect(:sym)
would make more sense by using case equality for comparison instead of #call. It would be useful with regexes for example. There's a ticket proposing this but I can't seem to find it.
Updated by marcandre (Marc-Andre Lafortune) almost 11 years ago
- Assignee changed from matz (Yukihiro Matsumoto) to marcandre (Marc-Andre Lafortune)
I agree, an optional argument would be best. I'll propose a patch. Could we use if_none
though?
Updated by nobu (Nobuyoshi Nakada) almost 11 years ago
[GH-561] https://github.com/ruby/ruby/pull/561 ?
Updated by naruse (Yui NARUSE) almost 7 years ago
- Target version deleted (
2.2.0)
Updated by hsbt (Hiroshi SHIBATA) 9 months ago
- Status changed from Open to Assigned