З документів:
- (Об'єкт?) Виявити (ifnone = нуль) {| obj | ...}
- (Об'єкт?) Знайти (ifnone = нуль) {| obj | ...}
- (Об'єкт) виявити (ifnone = нуль)
- (Об’єкт) знайти (ifnone = нуль)
Проходить кожен запис у перерахунку до блоку. Повертає перший, для якого блок не хибний. Якщо жоден об'єкт не відповідає, викликає ifnone і повертає його результат, коли він вказаний, або повертає нуль інакше.
Якщо блок не вказаний, замість нього повертається нумератор.
(1..10).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> nil
(1..100).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> 35
Це працювало для мене:
clients.detect{|client| client.last['client_id'] == '2180' } #=> ["orange", {"client_id"=>"2180"}]
clients.detect{|client| client.last['client_id'] == '999999' } #=> nil
Дивіться:
http://rubydoc.info/stdlib/core/1.9.2/Eumerable#find-instance_method
find
іselect
полягає в тому, щоfind
повертає першу відповідність іselect
(яка відчуженаfindAll
) повертає всі збіги.