From: kai13@... Date: 2001-02-28T15:37:28+09:00 Subject: [ruby-list:28368] 【要望】 EmacsLisp みたいなフック ファイルリストなどをフィルタリングする時に然るべきタイミングで 呼び出すようにする場合、あったら便利だなと思って書きました。 イメージとして ・yield の出力先を複数に出来る。 ・処理する場所に近いところで記述できる。 ・クラス作成者はフックがいつ呼ばれるか(順序等)気にしなくていい。 ・必要に応じて呼び出すオプショナルな処理。 ちょっと長いですが、以下のようなイメージです。 class Foo def get_list(uri_list) uri_list.each {|uri| cache_file_name = get_cache_name(uri) flag = add_hook(:cache_name,cache_file_name,uri) next unless flag get(uri) flag = add_hook(:response,res1,res2,cache_name) } end end if $0 == __FILE__ f0 = Foo.new f0.set_opt('foo','bar') # 共通の設定 list = get_links('http://foo.com/') # ['http://...','http://...html','...'] begin # 二つの関数からフックをトラップする f0.get_list(list) f0.another_request hook :cache_name |file,uri| # この部分はイテレータとして働く if file =~ /.cgi/ override_save true elsif uri =~ /hoge.cgi/ auto_rename_and_save true elsif File.exist?(file) new_name = file + ".1" save true else # skip nil end # end hook hook :response |r1,r2,uri| # 第二のイテレータ ... end begin f0.get_list(another_list) hook :cache_name # 別の処理 ... end end --