From: Wakou Aoyama Date: 1999-07-18T18:23:46+09:00 Subject: [ruby-dev:7359] Re: Ruby 1.3.5 青山です。 Sun, Jul 18, 1999 at 10:08:02AM +0900 において Shin-ichiro HARA さん曰く: > もっとも read が「残りすべてを読む」という意味を持っている事をユー > ザーが意識しているならば、read を複数呼ぶようなプログラムは書か > ないはずだと思うのだけどどうでしょうか。 そうなんですよね。したがって、論点の中心はファイルポインタの位置=ファ イルサイズの場合の読み込みはどうあるべきかという事になると思います。 (あるいは、EOF とは何かという事か。) > 一方、io が EOF に達している場合の read(0) は > > (1) 0 バイトは読み込める大きさなのだから読んだ結果 "" を返すべき > (2) 読む前に EOF に達しているのだから nil を返すべき > > と、2つの考え方があって、どちらももっともでそれぞれに得する事はある > と思います。しかし C のライブラリの慣習としては (2) だったような気がす > るので、 > > io.read(0); io.read(0); io.read(0) #=> nil, nil, nil > > に一票入れます。 すでに EOF に達しているとみなす場合、EOF までを返す、length を省略した read もやはり nil を返すべきと思われますが、いかがでしょうか。 read も nil を返すようにするならば、この案に賛成です。というか、最初の [ruby-dev:7326] の提案がそれですね。 (3) ファイルポインタが移動しなければ EOF には達しない $ ruby -e 'io = open("2"); p io.stat.size; p io.read(1); p io.read(1); p io.read(1)' 2 "1" "2" nil $ ruby -e 'io = open("1"); p io.stat.size; p io.read(1); p io.read(1)' 1 "1" nil $ ruby -e 'io = open("0"); p io.stat.size; p io.read(1)' 0 nil EOF に達せず、かつ文字列は返ってこない場合を、空文字列が返って来たとみ なす案ですね。(すなわち、io.read(0); io.read(0) #=> "", "" ) -- 青山 和光 Wakou Aoyama