From: Shin-ichiro Hara Date: 1999-07-23T12:23:27+09:00 Subject: [ruby-dev:7408] Re: Ruby 1.3.5 原です。 In message "[ruby-dev:7402] Re: Ruby 1.3.5" on 99/07/23, Yukihiro Matsumoto writes: | |まつもと ゆきひろです |まあ、EOFとストリームポインタが末尾にあることを分離すること |には私も賛成します。ということで、この件に関しては3人の意見 |の一致を見ましたね。きっと反対者も(そんなには)いないでしょう。 そうですね。 || 直前の1バイト以上の読み込みで読み込み終了になった場合 ture、 || そうでないとき false。 || 直前に1バイト以上の読み込みをしてない場合は不定(か true)。 |正式に定義した方が良いとは思いますけどね。でも、私ならまず | |> 直前に1バイト以上の読み込みをしてない場合はfalse あ、その通りです。「ture」というのは書き間違いです。 |とするでしょう。ですから、いきなりの eof? も問題なしです。 私がいきなりの eof? が問題だと言ったのは、(最初 false であることが) ユーザーの直観と事なる場合があるからです。それからもう一つ、現行の eof? も feof(3) も io の種類によっては入力待ちでブロックすることが ありますよね?それもユーザーが理解していないといけない。必ず何バイ トか読んでから eof? を使うのを作法にすべきかと。話がちょっとずれま した。 |ただ、feof(3)に頼っちゃうとソケットとかで困る可能性もありま |すよね。たぶん、10バイト読み込もうとして8バイトしか読み込め |なかったら、それだけでfeof(3)がセットされちゃう可能性が考え |られます。 そ、そんな可能性があるんですか。 ||(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=∞)と解釈できるモデルの方が好みです。 実際、(1) を導入した場合、たまにユーザーがはまります。なにせ read() と read(n) は同じ名前だから。その度に私が責任感じてど うしてそうなのかを説明することになると思います。これはとても 良くない。故に、 read()はread(n=∞)と解釈できるモデルに賛成します。 あとちょっとで結論がでそう。(^^;;;