Я могу написать короткий пример, который подтверждает, что to_a
из Enumerable
вызывает each
внутри. Вот оно:
class MyFooClass
include Enumerable
def initialize
@members = [1, 2, 3]
end
def each
puts "each is now called"
@members.each{ |m| yield(m) }
end
end
a = MyFooClass.new
puts "let us convert to array"
g = a.to_a
Вывод:
let us convert to array
each is now called
Обратите внимание, что each
не является членом Enumerable
, но to_a
является. Кроме того, если я удаляю определение each
из моего класса, то происходит сбой кода со следующим сообщением:
in `to_a': undefined method `each' for #<MyFooClass:0x997c1ac @members=[1, 2, 3]> (NoMethodError)
Мне интересно, есть ли официальная документация Ruby по этому поводу, которая бы документировала тот факт, что to_a
(который является членом Enumerable
) проходит через each
метод в вашем классе. Пожалуйста, не направляйте меня к исходному коду to_a
. Я не считаю это ответом.