内部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
。私はこれを答えとは考えていません。