ブロック構造付きメソッド
いつもRubyを身につけたいなぁ、と思ってたぼくをいつまでも妨げてくれるのが、ブロック構造付きメソッド。昔の本だとイテレータって言ってたけど。
Rubyのブロックがまさしく、オレをブロックする!!なんて、しょーもなorz
さて、ここ数年、SICPも半分ぐらいは一通り読んで、ようやくRubyのブロック付きメソッドがlamdaなんだと認識(間違ってる?)したところで、次の式を読んでみよう。
Rubyにおけるファイル読み込み例
File.open("hoge.txt") {|f| contents = f.read print contents }
元ネタは、Yuguiさんの『初めてのRuby』。今まさに、勉強させていただいてます。
- 作者: Yugui
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/26
- メディア: 大型本
- 購入: 27人 クリック: 644回
- この商品を含むブログ (251件) を見る
この文をイテレータと言う誤った認識だと、わけがわからない。6年前はこれで挫折した。
さて、これをPerlで書き下すとどうなる? (本当は、Schemeで、と思ったけど、手元にファイル入出力の資料がないため断念)
open(my $fp, "<", "hoge.txt") and do { my @contents = <$fp>; print @contents; close($fp); };
てな感じだよね? 違う?
まだよくわからないことがある。Rubyのブロック内で|f|で受けている部分。ここには、何でファイルポインタが入るの? openメソッドの仕様?
昔は、イテレータと言う単語が深くインプリされていたので、|f|にファイルの1行が入るもんだと思ってた。だから、いつまでたっても理解できなかった。ようやく、少しはわかり始めてきたかな。
千里の道も一歩から。って、遠すぎ。。。