In article <20031113162702.994D.GGB03124 / nifty.ne.jp>,
  Take_tk <ggb03124 / nifty.ne.jp> writes:

>> 私は、open-uri.rb で実装してある、「Kernel#open は 引数が open に反応
>> できるならそれを呼ぶ」という機構が良いと思っています。
>
> uriって普通は文字列ではないのかな?

さて、どうでしょうね。

> 具体的には、どうやるのでしょう?
>
> 試しに、
> "file://server/share_name/dir/neme.ext"
> 形式のために
>   @@schemes['FILE'] = ::File
> としてみたが、見事に失敗しました。(言われたことと違うことをやっている)

uri.rb は file: スキーマをサポートしていないので、URI 経由でローカルファ
イルをアクセスすることはできないんじゃないでしょうか。

uri.rb を適切に拡張法すればうまくいくんじゃないかと想像します。具体的
な方法は知りませんが。

> あと、こんなエラーもでました。
>
> ----
> require "open-uri"
>
> path =  "http://www.ruby-lang.org/"
> p path
>
> uri = URI.parse(path)
> uri.open(path) {|f|
>    f.each_line {|line| p line}
>  }
>
> ##"http://www.ruby-lang.org/"
> ##uninitialized constant OpenURI::O_RDONLY (NameError)
> ##  C:/Program Files/Apollo/lib/ruby/1.8/open-uri.rb:103:in `open_uri'
> ##  C:/Program Files/Apollo/lib/ruby/1.8/open-uri.rb:316:in `open'
> ----

次のようにしてください。path は uri の中で表現されているので、引数につ
ける必要はありません。

require "open-uri"

path =  "http://www.ruby-lang.org/"
p path

uri = URI.parse(path)
uri.open(File::RDONLY) {|f|
   f.each_line {|line| p line}
}

ただ、O_RDONLY を参照しているのはバグです。これは直します。
-- 
[田中 哲][たなか あきら][Tanaka Akira]