From: matz@... (Yukihiro Matsumoto) Date: 1999-07-21T17:57:28+09:00 Subject: [ruby-dev:7393] Re: Ruby 1.3.5 まつもと ゆきひろです In message "[ruby-dev:7392] Re: Ruby 1.3.5" on 99/07/21, Yukihiro Matsumoto writes: |それは分からないでもないですが、それなら nil を返すって仕様 |そのものがあんまし良くなくて "" が来れば EOF のような仕様に |なっちゃいますよね。あるいは終端では常に nil か。 問題を整理しましょう。 まず第1にストリームポインタが末尾にあるとき、これを * EOFとみなす * EOFとみなさない という点があります。原さんは「みなさない」方が単純で良いので はないかということですね。私はこちらにはあまりこだわりはあり ませんが、「みなす」方がstdioの設計になじむようには思います。 次にストリームポインタが末尾にある(たとえば空ファイルの先頭) ときにread(),read(n)がなにを返すかということを考えましょう。 選択肢は * 空文字列("") * nil * 一度目は空文字列、2度目以降はnil くらいでしょうか。原さんは「read()では空文字列、read(n)では nil」のようですね。 ここで考慮すべき(と私が思う)は「EOFではnilという原則をread() で適用しなくても良いか」という点と「read()とread(n)の挙動は どれだけ違っていることが許容されるか」という点です。 私自身はread()はread(n)のn=∞だと考えた方が良さそうに思えて きているので(最初からそう思ってたわけでもないですが)、read() とread(n)の原則的な挙動はほとんど同じ方が良いと思っています。 それを適用すると「一度目は空文字列、2度目以降はnil」を共通の 挙動として採用するのが良さそうに思えます。いかが? まつもと ゆきひろ /:|)