読者です 読者をやめる 読者になる 読者になる

Rails::Initializable::Collectionのtsort_each

tsort(トポロジカルソート)は主に依存関係の解決に利用されるようです。この処理の前には、あの処理をやっておくというように指示すると、tsortはその条件に合うようにソートします。次のコードはRailsの初期化処理とほぼ同じ実装で、:afterまたは:beforeで依存関係を指示しています。コード内の例を:beforeから:afterに線を引いてDAGを書くと次のようになります。
http://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Directed_acyclic_graph.png/180px-Directed_acyclic_graph.png(wikipediaより)

tsort_each_node(&block)はnodeを返し、tsort_each_child(node,&block)はnodeのchild、すなわち矢印の元になっているnodeの配列childrenを作ってchildren.each(&block)を処理させます。そうすると、tsort_each {|i| なにか処理 }をするとiには依存関係を守った順序で結果を返します。