From: Shin-ichiro HARA Date: 1999-07-19T00:30:08+09:00 Subject: [ruby-dev:7363] Re: Ruby 1.3.5 原です。 > 青山です。 > そうなんですよね。引数無し read については、全く別のメソッドとみなして > ドキュメントの方を変更するという事でも良いと思います。 > > > read [length] > > lengthバイト読み込んで,その文字列を返します. lengthが省略 > > された時には,EOFまでの 全てのデータを読み込みます. > > EOFでnilを返します. ああ、ドキュメントはこう書かれていたのですか。なるほどこれは誤解を 招きますね。多分、修正し忘れだと思います。 > read [length] > 最大lengthバイト読み込んで,その文字列を返します. > EOF(1バイトも読み込めなかった場合)でnilを返します. > lengthが省略された時には,EOFまでの全てのデータを読み込みま す. > EOF(1バイトも読み込めなかった場合)で""を返します. これでいいのだと思います。 > > ピンと来ないのですが、「EOF に達せず、かつ文字列は返ってこない場合」という > > 場合は考えなくて良いのでは?そんな時ってあるのかな。 > > ファイルポインタの位置=ファイルサイズでない場合の read(0) がそれにな > るかと。 > > $ ruby -e 'io = open("2"); p io.stat.size; p io.read(0)' > 2 > nil # これが「EOFでnilを返します.」に反するわけです. ああ、これが現状なんですね!これを 2, "" と返すべきだというのが (3) 案だった のでしょうか?そうだとすればこれは納得できます。read(0) については (a) 常に nil を返す (b) EOF で nil を返す。そうでなければ "" を返す (c) 常に "" を返す (d) パラメータが範囲外だとして例外をあげる というのが考えられるけれども、現状は (a) なんですね。私は正のバイト数を 読むのが read(byte) の本来の仕事であると思うので、read(0) は適当でいい 思います。どれがいいのかなあ。(3) 案とは(b)の事ですか?