なかだです。 At Thu, 8 Jul 1999 00:17:15 +0900, Minero Aoki <aamine / dp.u-netsurf.ne.jp> wrote: > それからこれは追加提案ですが、ファイルが複数あるライブラリを使う > ときには将来の拡張に備えて、次のようなメソッドを介することにしたら > どうでしょうか。ポイントはコメントアウトしてあるところで、 > ディレクトリをつくらないライブラリもロードできます。 賛成一票 & patch:-) ------------------------------------------------------------------- --- use_lib.orig.rb Thu Jul 8 06:25:44 1999 +++ use_lib.rb Thu Jul 8 06:57:29 1999 @@ -2,28 +2,22 @@ if fnames.empty? then raise ArgumentError, "filenames required" end - return if $:.find{|dname| File.basename( dname ) == libname } # ライブラリに対応するディレクトリを探す - targ = nil - $:.each do |dname| - Dir.foreach( dname ) do |fname| - if File.directory? fname and - File.basename( fname ) == libname then - targ = File.expand_path( dname ) + File::Separator + packname - break - end - end - break if targ - end - - # みつからなくても(いまのところ)無視する - # unless targ then - # raise LoadError, "library #{libname} not exist" - # end + targ = (catch(:target) { + $:.each {|dname| + dname = File.expand_path(libname, dname) + throw :target, dname if File.directory? dname + } + # みつからなくても(いまのところ)無視する + # raise LoadError, "library #{libname} not exist" + } unless $:.find {|dname| File.basename(dname) == libname}) # ライブラリのファイルをロード - $:.unshift targ - fnames.each{|f| require f } - $:.delete! targ + $:.unshift targ if targ + begin + fnames.each{|f| require f } + ensure + $:.delete targ + end end ------------------------------------------------------------------- # む〜、patch の方がデカいような… # なんか、Enumerable#find と同じように働くけど、要素じゃなくて評価して真 # になった値を返してくれる(標準的な)のが欲しいな、とか言ってみたり。 ## うまい名前が思い付かない...(-_-) > 第二引数以降はこの実装ではファイル名ですが、将来にはモジュール側が > スクリプトの中で指定できる「feature」として扱うようにすることも > 可能でしょう。 feature => ファイル名のマッピングをどうするか、が気になるところですが。 -- ♪だって だって だって だって Bugってるから♪ 中田 "ねぇ hoge ってして♪" 伸悦