[#7300] resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...>

あんまり ruby-dev な話でも無いのですが、ちょっとした機能拡張の提案なので、

12 messages 1999/07/12
[#7321] Re: resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1999/07/15

From: Toshihiko SHIMOKAWA / 下川俊彦 <toshi@csce.kyushu-u.ac.jp>

[#7313] Ruby 1.3.5 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.5 is out, check out:

59 messages 1999/07/15
[#7318] Re: Ruby 1.3.5 — WATANABE Hirofumi <watanabe@...> 1999/07/15

わたなべです.

[#7326] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/15

青山です。

[#7331] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/16

まつもと ゆきひろです

[#7340] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/16

青山です。

[#7368] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7373] Re: Ruby 1.3.5 — Shin-ichiro Hara <sinara@...> 1999/07/19

原です。

[#7374] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7382] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/19

青山です。

[#7386] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/21

まつもと ゆきひろです

[#7388] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/21

青山です。

[#7387] [PATCH]extconf.rb, tcltklib.c, and rubytest.rb for NetBSD — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp>

早坂@会津大学です。

10 messages 1999/07/21

[#7466] [PATCH] for djgpp — WATANABE Hirofumi <watanabe@...>

わたなべです.

21 messages 1999/07/29
[#7467] Re: [PATCH] for djgpp — Katsuyuki Komatsu <komatsu@...> 1999/07/29

小松です。

[ruby-dev:7360] Re: Ruby 1.3.5

From: Shin-ichiro HARA <sinara@...>
Date: 1999-07-18 12:04:04 UTC
List: ruby-dev #7360
原です。

> 青山です。

> そうなんですよね。したがって、論点の中心はファイルポインタの位置=ファ
> イルサイズの場合の読み込みはどうあるべきかという事になると思います。
> (あるいは、EOF とは何かという事か。)

うん、そうですね。しかし EOF を改めて考え直す必要はないんじゃないかな。

> > 一方、io が EOF に達している場合の read(0) は
> > 
> > (1) 0 バイトは読み込める大きさなのだから読んだ結果 "" を返すべき
> > (2) 読む前に EOF に達しているのだから nil を返すべき
> > 
> > と、2つの考え方があって、どちらももっともでそれぞれに得する事はある
> > と思います。しかし C のライブラリの慣習としては (2) だったような気がす
> > るので、
> > 
> > io.read(0); io.read(0); io.read(0) #=> nil, nil, nil
> > 
> > に一票入れます。
> 
> すでに EOF に達しているとみなす場合、EOF までを返す、length を省略した
> read もやはり nil を返すべきと思われますが、いかがでしょうか。

そうでしょうか。私は EOF から EOF まで0バイトの文字列 "" があるので
それを返すのはもっともな仕様だと思います。引数無し read は名前こそ
read だけど、read(byte) とは全く別のメソッドであって、[ruby-dev:7357] に
も似たようなのを書きましたが、

  def readall
    s = ""
    while !eof?
      s.concat read(1024)
    end
    s
  end

の事だと思うわけです。nil などは無しに、常に String を返すというのは最
もシンプルな仕様でしょう。「全て読む」という意味で使うのだから読んだ後
EOF であることを通知する必要はなくて、その通知は readall が内部で受
けて消化してしまうべきであると思います。

> read も nil を返すようにするならば、この案に賛成です。というか、最初の
> [ruby-dev:7326] の提案がそれですね。

「この案」とは EOF での read(0)  を nil とする事ですが、こちらにはあまり
確信はありません。0/0 的な不定さがあると思います。「最初の提案」とは
EOF での read は nil を返すとする事ですが、こっちには先の理由で反対
です。

> (3) ファイルポインタが移動しなければ EOF には達しない

> EOF に達せず、かつ文字列は返ってこない場合を、空文字列が返って来たとみ
> なす案ですね。(すなわち、io.read(0); io.read(0) #=> "", "" )

ピンと来ないのですが、「EOF に達せず、かつ文字列は返ってこない場合」という
場合は考えなくて良いのでは?そんな時ってあるのかな。

とにかく EOFに達した io を read すれば "" を返し、read(0) は良くわからないけど
さしあたって nil とするのが良い、というのが私の説です。


In This Thread