[#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:7388] Re: Ruby 1.3.5

From: Wakou Aoyama <wakou@...>
Date: 1999-07-21 06:33:22 UTC
List: ruby-dev #7388
青山です。

Wed, Jul 21, 1999 at 02:19:48PM +0900 において
Yukihiro Matsumoto さん曰く:

> 「read()とread(n)を別のメソッドとしてみなす」というのは理解
> できます。が、「read()がEOFで""を返すことの利便性」ってのは
> よく理解できてません。便利なの?
> 
> 「めったにないことだから(2度目のread()の時にしか発生しない)どっ
> ちでも良い」というのは良く理解できるんですが。

現在の 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) のような挙動になり
ます。

> 現時点ではread(0)は""を返すべきだと思ってます。EOFを検出した
> 後は nil になるかも。

私も賛成です。(というか、これが現在の eof? ではできなかった為の議論だっ
たわけですが)


-- 
青山 和光 Wakou Aoyama <wakou@fsinet.or.jp>

In This Thread