Я нахожу эту строку в исходном коде ZenTest:
result = @test_mappings.find { |file_re, ignored| filename =~ file_re }
@test_mappings и result здесь оба являются объектами Array, но я не нашел метода find для класса Array в ruby doc. Еще пробовал на irb:
irb(main):014:0> Array.respond_to? :find
=> false
irb(main):015:0> [1,2,3].find
LocalJumpError: no block given
from (irb):15:in `find'
from (irb):15:in `each'
from (irb):15:in `find'
from (irb):15
irb(main):016:0> [1,2,3].find{|x| x>1}
=> 2
Может ли кто-нибудь мне это объяснить? Как мог метод find также возвращать объект Array? заранее спасибо.

Array включает модуль Enumerable, который добавляет метод find.
В вашем примере вы тестировали Array.respond_to. Это вернет истину только для методов класса Array. find - это метод экземпляра, поэтому respond_to? необходимо вызывать в экземпляре класса.
>> a = Array.new
=> []
>> a.respond_to? :find
=> true
Хорошее замечание, Чак. (Хотя вы должны использовать строку, а не символ, например, "найти")
@Gordon, мне интересно, есть ли способ позволить мне узнать, из какого класса был инициирован вызов метода, например, как в этом случае, чтобы вернуть Enumerable для вызова метода "find".
@eric, хороший вопрос. Я даже не знаю ответа. Но я бы хотел. Хотите задать вопрос? Бьюсь об заклад, кто-то здесь может объяснить это нам обоим.
Другой иногда полезный трюк - это вызов функции «методы», которая перечисляет все методы, доступные экземпляру объекта, и использование метода grep для фильтрации чего-то конкретного. Это также дает вам хорошее представление о том, какие стандартные методы предоставляются базовыми классами, не обращаясь к документации.
a = Array.new
=> []
>> a.methods.grep /find/
=> ["find", "find_all"]
Если вы не хотите создавать экземпляр, чтобы посмотреть, будет ли он на что-то отвечать, вы можете написать Array.instance_methods.include? (: Find)