From: nobu.nakada@... Date: 2002-04-17T22:25:02+09:00 Subject: [ruby-dev:16944] Re: Iconv なかだです。 At Wed, 17 Apr 2002 19:25:18 +0900, Tanaka Akira wrote: > > Iconv.iconvで複数のStringを渡されたときに、エラーになったString > > 以降がそのまま収められるようになってます。で、最初failedはやめ > > ちゃおうかと思ったんですが…。 > > 理解しました。「以降」というところがわかっていませんでした。ふむ。 > > えぇと、理解した第一印象は必要以上に複雑なのではないかというものです。 > Iconv.iconv という一番複雑なところの都合で通常の用途が面倒になってしま > うのは気に入りません。CGI#[] が Array を返すのに似た匂いがするといいま > すか。そもそも Iconv.iconv はいちいちインスタンスを生成せずに済む簡易 > 的な使用法として位置付けられている(と思う)のに、それが面倒臭さの原因に > なっているところが引っかかります。 なるほど。統一しようと思い立っても踏み切れない違和感はそのへん かも知れません。 > しかも、(ちゃんとソースを読んでいるわけではないので推測になりますが) > E2BIG な時には自動的に iconv(3) が繰り返し呼ぶことによって出力バッファ > を抽象化していることを考えると、渡した文字列のそれぞれと iconv(3) の呼 > び出しが一対一で対応するわけでもなく、何が起きたのかを完全に把握できる > わけでもなさそうです。まぁ、これは Iconv.iconv だけではなくて > Iconv#iconv でもそうなのでしょうが。 たしかに完全にエラーリカバリしようというのは難しそうです。 > 思うに、むしろ Iconv.iconv を単純化するか、捨てるかした方がいいのでは > ないかという気がします。たとえば、Iconv.iconv は廃止して、 (snip) > どうせ、文字列ひとつをともかく難しいことは考えずに変換したいという場合 > が一番多いでしょうから、その文字列を単純に渡せば変換して terminate も > してくれた文字列が返ってくる、というインターフェースのがお気軽でいいの > ではないかと思います。 nkf互換のインターフェースは用意しようかと思ってたので、そのくら いがちょうどいいのかも知れません。 > 複数の文字列に分けて呼び出したいっていうのはどんな場合がありますかね? > 文字が別れていた時に Iconv::InvalidCharacter が発生して欲しい場合? > 実行効率? 他にはなにがあるでしょう? ないかも知れませんねぇ。いらないか。 > > でもiconv_tは複製されないから結局同じですよ。たぶん、どこかで > > closed iconv (ArgumentError)といわれるのがオチじゃないかと。 > > ちっ。 (^^;) > > エラーのときにyieldするというのはどうかなとか、今ふと思ったんで > > すが。 > > 今回の私の用途でいえば、failed がブロックに渡されて、ブロックの返り値 > で処理が続行すると都合がいいですね。ただ、これで扱える話って一般的なの > かなぁ。 successは要らないでしょうか。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦