Skip to content

End of Life Ruby 3.0 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →

instance method

Enumerable#detect

enum.detect(ifnone = nil) { |obj| block } → obj or nil
enum.detect(ifnone = nil) → an_enumerator

Alias of #find

Passes each entry in enum to block. Returns the first for which block is not false. If no object matches, calls ifnone and returns its result when it is specified, or returns nil otherwise.

If no block is given, an enumerator is returned instead.

Example
(1..100).detect  #=> #<Enumerator: 1..100:detect>
(1..100).find    #=> #<Enumerator: 1..100:find>

(1..10).detect         { |i| i % 5 == 0 && i % 7 == 0 }   #=> nil
(1..10).find           { |i| i % 5 == 0 && i % 7 == 0 }   #=> nil
(1..10).detect(-> {0}) { |i| i % 5 == 0 && i % 7 == 0 }   #=> 0
(1..10).find(-> {0})   { |i| i % 5 == 0 && i % 7 == 0 }   #=> 0
(1..100).detect        { |i| i % 5 == 0 && i % 7 == 0 }   #=> 35
(1..100).find          { |i| i % 5 == 0 && i % 7 == 0 }   #=> 35
See also #find #cycle #drop #count also in 4.1 · 4.0 · 3.4 · 3.3 · 3.2 · 3.1