From: Masahiro Sakai (=?iso-2022-jp?B?GyRCPHIwZkAvTTUbKEI=?=) Date: 2003-12-11T21:42:05+09:00 Subject: [ruby-dev:22234] Re: yet another inconsistency about EOF between StringIO and IO さかいといいます。 From: nobu.nakada@nifty.ne.jp Date: Wed, 10 Dec 2003 18:17:58 +0900 > なかだです。 > > At Wed, 10 Dec 2003 17:24:33 +0900, > Tanaka Akira wrote: > > なんかまだ微妙に違います。 > > 合わせました。他に何かありますか。 IO#eof?がEOFフラグへの副作用を持つのに対して、 StringIO#eof?はEOFフラグへの副作用を持たない という違いがあるようです。 % echo -n > 0 % ruby -e 'f = File.open("0") p f.read' "" % ruby -e 'f = File.open("0") f.eof? p f.read' nil % ruby -rstringio -e 'f = StringIO.new p f.read' "" % ruby -rstringio -e 'f = StringIO.new f.eof? p f.read' "" 述語が副作用を持つのは直観に反するので、 IO#eof?をStringIO#eof?に合わせるのがよいと思います。 Index: io.c =================================================================== RCS file: /src/ruby/io.c,v retrieving revision 1.241 diff -u -p -r1.241 io.c --- io.c 10 Dec 2003 08:26:31 -0000 1.241 +++ io.c 11 Dec 2003 12:16:55 -0000 @@ -568,6 +568,7 @@ rb_io_eof(io) ungetc(ch, fptr->f); return Qfalse; } + clearerr(fptr->f); return Qtrue; } -- 酒井 政裕 / Masahiro Sakai