From: Wakou Aoyama Date: 1999-04-06T22:34:27+09:00 Subject: [ruby-list:13367] Re: iterator for Dummies( was Re: Ruby anywhere ) 青山です。 Tue, Apr 06, 1999 at 08:40:24PM +0900 において NAKAMURA, Hiroshi さん曰く: > 上記定義が重要で,特に「iterator」にこだわる必要はないんですね... そうですね。イテレートしないイテレーターとかいう言葉もよく見掛けました し、繰り返しという事よりは、外部のブロックを利用できるという事がメリッ トだと思います。 という事で、私の場合のイテレータ(と呼ばれている機能)の「これって便利で しょ?」は、例えば、telnet.rb なんかですが、ブロック付きで呼び出した場 合には、実行中にもその過程を得る事ができます。 host = Telnet.new({"Host"=>"localhost") print host.cmd("command") # command の実行が終ってから表示 host.cmd("command"){|c| print c } # ホストから得られたデータを逐次表示 メソッドの実行途中で簡単に外部に(値を渡しつつ)制御をまわせるというのは とても便利です。 > ちょっとすっきり(「制御構造」はどこいった? > なひ). 制御構造というか、文法の拡張みたいな感じのも簡単にできて便利ですね。こ ちらは cgi-lib.rb (1.3 系付属の新版) のドキュメントから引用。 require "cgi-lib.rb" CGI::print{ CGI::tag("HTML"){ CGI::tag("HEAD"){ CGI::tag("TITLE"){"TITLE"} } + CGI::tag("BODY"){ CGI::tag("FORM", {"ACTION"=>"test.rb", "METHOD"=>"POST"}){ CGI::tag("INPUT", {"TYPE"=>"submit", "VALUE"=>"submit"}) } + CGI::tag("HR") } } } 最初の telnet.rb のような事は他の言語でもサブルーチンへのポインタを渡 すというような事で可能ですが、この cgi-lib.rb のような文法拡張に似たよ うな事は Ruby ならではのように思います。 機能的には同じ事なのですが、一々手続き(サブルーチンやブロック)を生成し てそこへのポインタを渡すという手間がいらない文法を採用(発明?)した Ruby ならではの長所でしょう。 -- 青山 和光 Wakou Aoyama