From: matz@... (Yukihiro Matsumoto) Date: 2000-02-04T14:16:29+09:00 Subject: [ruby-dev:9081] Re: bang method returns string always まつもと ゆきひろです In message "[ruby-dev:9075] Re: bang method returns string always" on 00/02/04, "NAKAMURA, Hiroshi" writes: |なひは過去に,ソケットから読み込んだ端から文字列を解析するために, | |buf = "" |while ( newStr = socket.read( 1024 )) | buf << newStr | while buf.sub!( /([^,]*),/, '' ) | p $1 | end |end | |みたいなのを結構使ってきているので,今回の変更には大反対です. |でも,他に誰も大反対が居ないということは, |もしかして上記コードには,より良い代替案があるんでしょうか...^^; ま、トレードオフみたいなもんで過去との互換性の観点から反対が 出るのは理解できます。ま、私(たち)がメソッドチェーンが結構好 きと言うのはありそうです。 上記のコードに限れば * read(1024)ではブロックしてしまう * 以下の方がきれいか buf = "" begin loop do buf.concat socket.sysread(1024) buf.scan(/([^,]*),/){ p $1 } buf = $' end rescue EOFError end なんてのが考えられそうですが。と思ったら上記のscanを使うバー ジョンは現状では動きませんでした。今度のcommitでできるように なります(1.5系)。 |# $~を使え,というwork aroundはわかりますが, |# あちこち書き換えて回る(そしてテストし直す ^^;)のが面倒だなぁ. ま、気持ちは分かります。ruby-talkでも同様の話題がありました。 ま、これは実験版ですからいろいろ議論して決めましょう。 まつもと ゆきひろ /:|)