From: matz@... (Yukihiro Matsumoto) Date: 1999-07-23T10:57:57+09:00 Subject: [ruby-dev:7402] Re: Ruby 1.3.5 まつもと ゆきひろです In message "[ruby-dev:7395] Re: Ruby 1.3.5" on 99/07/22, Shin-ichiro Hara writes: |これに賛成!(^^;; と、いうか EOF に達しているけど、eof? は false |であることを許す、といったらいいのかな。(つまり必ずしも eof? |は EOF にポインタが来ていることを表さない。)EOF という言葉が |いろんな意味で使われてごちゃごちゃになってますね、、、 まあ、EOFとストリームポインタが末尾にあることを分離すること には私も賛成します。ということで、この件に関しては3人の意見 の一致を見ましたね。きっと反対者も(そんなには)いないでしょう。 |すなわち、eof? は | | 直前の1バイト以上の読み込みで読み込み終了になった場合 ture、 | そうでないとき false。 | 直前に1バイト以上の読み込みをしてない場合は不定(か true)。 | |みたいに正式に定義してしまうのが良い、と思うようになりました。 正式に定義した方が良いとは思いますけどね。でも、私ならまず > 直前に1バイト以上の読み込みをしてない場合はfalse とするでしょう。ですから、いきなりの eof? も問題なしです。 ただ、feof(3)に頼っちゃうとソケットとかで困る可能性もありま すよね。たぶん、10バイト読み込もうとして8バイトしか読み込め なかったら、それだけでfeof(3)がセットされちゃう可能性が考え られます。 それを考えると安易に feof(3) を使うのは考えものなのかなあ。 |一方、残る問題 read() ですが、0バイトファイルに read() を2回 |したとき、 | |(1) "", "" |(2) "", nil | |のどっちにするかですね。つまり | |(1a) read() は read(n) と全く違うものと思う |(2a) read() は read(n) と類似と思う | |の違いです。私は (1a) を推しています。0バイトファイルに対して |1回目の read() が "" であるのに read(0) は nil なので、read() |と read(n) が類似とはいえないから、というのが一つの論拠です。 うーん、論拠がご自分で導入した |さて、read(0) の返り値についてですが、私は | | io.read(0) は io の状態にかかわらず常に nil を返す | |を提案します。 に依存しているのはやや苦しいですね。私はread()はread(n=∞)と 解釈できるモデルの方が好みです。 とりあえず、近いうちに現状をリリースしてしまいましょう。実際 に動かして見てもらわないと話が難しいでしょうから。CVSが使え る人はもうそのコードが commit されてますが。 # でも、やっぱり feof(3) ははずすべきのような気がしてきた。 まつもと ゆきひろ /:|)