フィボナッチ数列を次々と生成する場合を考える。フィボナッチ数列は無限に続くので、計算が終わらない。無限に終わらない処理は結果をreturnで返せないので、1つフィボナッチ数を生成するごとにコールバック呼び出しで結果を通知する仕様にする。1endこのように、時間がかかるor無限に計算が終わらない処理はコールバックで結果を返すといいと思います。〜〜のページを取得中、完了、などを計算する側でprint出力しているとコードが汚くなります。経過をお知らせするのもコールバック関数を登録する方式でやればいい。関数を実行する前に、コールバック関数を登録しておく。長い処理の場合、計算の経過を通知・計算結果を表示・ファイルに保存・twitterに通知・・・等と色々やりたい場合がある。コールバックを1つしか登録できないよりも、複数のコールバックを登録できるようにした方がいい。作り、&blockを普通に配列に貯めて、あとで使う。endが&blockに渡る。&blockをprintしてみれば何なのかわかる。ふが)&blockはProcだった。doで渡しても、Proc.newを参照渡ししても同じように動く。EventEmitterでコールバックを管理する場合コールバック関数を登録するための関数を自分で用意する必要がなくなる、EventEmitterというrubygemを作りました。event_emitter使ってみるクラスにincludeするとイベント管理機能が追加されます。計算開始コールバック関数を分類できるようになってる。この例では:numberと:endという2種類のコールバックを登録している。それぞれ、新しいフィボナッチ数が作られた時と、計算が終わった時に呼び出される。最近作ったもので、わかりやすい例を紹介するとtwitterでエゴサーチしてSkypeに通知するやつや、gyazzの差分を監視してSkypeに通知するやつは両方共event_emitterを活用していてエラーもクロールの経過報告も取得したページも全部コールバックを登録して受け取るようになっています。