eachメソッド系だろうと思いますが以下のような使われ方をします。その要素を1個づつブロックに渡して処理(画面に出力)をします。かこまれだ部分がブロックです。受け取る引数名を指定しブロックの中で使います。引数の数はメソッドがどう定義されているかに依存します。ここでのeachメソッドはひとつだけ値を渡しますので引数をひとつだけ受け取ります。配列のeachは以下と同等に定義されています。ブロックのコードが入る感じになります。先の例だとこんな感じです。異なる部分だけに注目したブロック部分だけ書けば良いようにすることが出来ます。言い換えると、同じパターンのコードを毎回書かなくても済みます。渡される引数の分だけ、ブロックの先頭で|p1,p2,..|と定義して受け取れば良いわけです。yieldの場合、数が違ってもエラーと成りませんので注意が必要です。文字列の処理ブロックを使う処理を書いてみましょう。処理する例題をあげてみます。2.0のデフォルト文字コードはUTF-8に成りました。SHIFT-JIS(CP932)でないと文字化けする場合がありますので注意して下さい。文字コードを意識するためにも先頭でコードの指定をするようにした方が良いでしょう。この様に定義したメソッドにもブロックを渡すことが出来ます。新規のキーの時にnilへの加算となることを防いでいます。block_given?はブロックが与えられたかを検証するコードです。最後のdt行でこのメソッドの戻り値として作ったハッシュを返しています。__FILE__の行は、このプログラムファイルが直接実行されたかの判定です。実行されたときだけtrueとなり以下の行を実行します。等で組み込まれたときには以下の行を実行しません。ファイル内に組み込みのテストコードを書く時の常套手段です。して受け取っています。回\n".encode("CP932")}はブロックの中のコードです。各要素を出力しています。encode("CP932")で文字コードをWindows用に変更しています。RDE等で見ると文字化けします。2}.compact.join(',')+"\n").encode("CP932")の部分は、同じsplit_and_countを使って出現頻度が2回以上の文字列を出力します。実行させることが出来ます。複数の処理パートを受け渡すことが出来ます。実行する例(visit_subdir)をあげます。下記の呼び出し例は指定されたディレクトリ以下のファイルのサイズの合計を計算します。適当なディレクトリ名に変更してください。end今回は機能をクラスとして作っています。end_proc)が注目しているメソッドです。引数として明示的にdir_proc,file_proc,end_procと言う名前で関数オブジェクトを受け取ります。ファイルを順に取出して処理します。nilにすることでサブディレクトリ単位の作業用変数を管理します。dir_procでdir_procが渡されていればディレクトリ名を渡して呼び出します。サブディレクトリの処理から戻ってきたら作業用変数をスタックから戻します。file_procを呼び出します。end_procrescueでエラーが起こったときに必要ならエラーを表示させて、処理を中止させます。Dir.foreachが終わったらend_procを呼び出しています。STDOUT.sync=trueこれは出力をバッファリングせずに直ぐに出力させるためのおまじないです。関数オブジェクトは作成された時に利用可能な変数等の内容を利用可能です。ブロックの中で出力用に使用しています。実際に関数オブジェクトが呼び出される時に、このwfを使って出力されます。end_procでスタック上のひとつ上のディレクトリ用のvalues[1]の所に足し込んでいます。]の意味は実現したい機能に応じて自由に意味付けすることが可能です。呼び出し部分を下記の様にするとディレクトリの深さが分ります。適当なディレクトリ名に変更してください。仮想マシン上にruby統合開発環境をインストールしてあります。インストール済みで各種rubyを切替ながら試せます。仮想マシンバザール(C)Trail4YouIndex。