From: Shin-ichiro HARA Date: 1999-07-18T10:08:02+09:00 Subject: [ruby-dev:7357] Re: Ruby 1.3.5 原です。 > 青山です。 > という案のつもりでしたが、アクセスカウンタを用意する方法ぐらいしか思い > 付きませんし、その方法はあまり嬉しくないので、0 バイトの読み込みは "" > を返すというのはどうでしょうか。 > > io.read # "" # == io.read(0) > io.read # "" # == io.read(0) > io.read # "" # == io.read(0) 私も既に EOF に達している io に対しての read は常に "" でいいのでは ないかと思います。それはパラメータ無しの read を def read s = "" while t = read(1024) s.concat t end s end と等価だと考えることですっきりするからです。(1024 はいいかげんです が) だから io が EOF に達しているならば、 io.read; io.read; io.read #=> "", "", "" というのが望ましいと思います。 もっとも read が「残りすべてを読む」という意味を持っている事をユー ザーが意識しているならば、read を複数呼ぶようなプログラムは書か ないはずだと思うのだけどどうでしょうか。 一方、io が EOF に達している場合の read(0) は (1) 0 バイトは読み込める大きさなのだから読んだ結果 "" を返すべき (2) 読む前に EOF に達しているのだから nil を返すべき と、2つの考え方があって、どちらももっともでそれぞれに得する事はある と思います。しかし C のライブラリの慣習としては (2) だったような気がす るので、 io.read(0); io.read(0); io.read(0) #=> nil, nil, nil に一票入れます。