ブロック構造付きメソッド

いつもRubyを身につけたいなぁ、と思ってたぼくをいつまでも妨げてくれるのが、ブロック構造付きメソッド。昔の本だとイテレータって言ってたけど。
Rubyのブロックがまさしく、オレをブロックする!!なんて、しょーもなorz

さて、ここ数年、SICPも半分ぐらいは一通り読んで、ようやくRubyのブロック付きメソッドがlamdaなんだと認識(間違ってる?)したところで、次の式を読んでみよう。

Rubyにおけるファイル読み込み例

File.open("hoge.txt") {|f|
  contents = f.read
  print contents
}

元ネタは、Yuguiさんの『初めてのRuby』。今まさに、勉強させていただいてます。

初めてのRuby

初めてのRuby

この文をイテレータと言う誤った認識だと、わけがわからない。6年前はこれで挫折した。

さて、これをPerlで書き下すとどうなる? (本当は、Schemeで、と思ったけど、手元にファイル入出力の資料がないため断念)

open(my $fp, "<", "hoge.txt") and 
do {
  my @contents = <$fp>;
  print @contents;
  close($fp);
};

てな感じだよね? 違う?

まだよくわからないことがある。Rubyのブロック内で|f|で受けている部分。ここには、何でファイルポインタが入るの? openメソッドの仕様?

昔は、イテレータと言う単語が深くインプリされていたので、|f|にファイルの1行が入るもんだと思ってた。だから、いつまでたっても理解できなかった。ようやく、少しはわかり始めてきたかな。

千里の道も一歩から。って、遠すぎ。。。