From: matz@... (Yukihiro Matsumoto) Date: 1999-07-21T15:42:30+09:00 Subject: [ruby-dev:7390] Re: Ruby 1.3.5 まつもと ゆきひろです In message "[ruby-dev:7388] Re: Ruby 1.3.5" on 99/07/21, Wakou Aoyama writes: |現在の eof? の実装では、長さ 0 のファイルに対して read() が "" を返す |ようにする事と、EOF で "" を返す事は同時にしかできなかった為の案です。 | |ところが、ちょっと試しに手元で feof(3) を使って eof? を書き換えてみる |と、それだけでこうなるんですね。 | |io.stat.size # 0 |io.read # "" |io.eof? # false |io.read # "" |io.eof? # false |io.read(0) # nil |io.eof? # false |io.read(0) # nil |io.eof? # false |io.read(1) # nil |io.eof? # true | |つまり、read() と read(0) は決して EOF に達しないわけです。なるほど。 |という事で、feof(3) を使用した場合には長さ 0 のファイルでも "" と EOF |に達した場合には nil というのを同時に実装できるようですが、いかがでしょ |うか?>原さん | |read() も EOF で nil を返すが、read() 自体は決して EOF には達しない。 |read(n) によって EOF に達していた場合には、read() も nil を返す。 |という感じです。eof? を feof(3) にしただけの場合。 | |ちょっとややこしいですから、read() にも手を加えて、read() 後は EOF に |達しているようにしてしまうといいかもしれないですね。内部で最後に |read(1) でもしておくとか。 | |すると、read() は、無限大の n を与えられた read(n) のような挙動になり |ます。 手元のRubyではすでにこのようになっています。 で、これをどうするかが問題ですね。どう思います?