なかだです。

ruby-devに振ります。

At Sat, 13 Oct 2007 14:44:45 +0900,
Martin Duerst wrote:
> >> >e.g.
> >> >  Iconv.open("utf-8", "euc-jp") {|cd|
> >> >    cd.iconv("\xa1\xa2") {|errinfo| ...}
> >> >  }
> >> 
> >> I don't understand this double block structure, can you explain?
> >
> >This idea is that Iconv#iconv and others yields error info on
> >failures.
> 
> すみません。外側の cd が conversion descriptor と読めなかったです。

cdという略記法は、元はiconv(3)のman pagesでしばしば用いられてい
るものなので、ext/iconvでも流用しています。

> 僕的にはそこのところに {|errinfo| } を持って来れると一番うれしいです。

Iconv#openのブロックは、IO#open同様にブロック終了時にIconvインス
タンスを自動的に破棄するようになっています。後方互換性だけでなく、
他のクラスのopenメソッドとの類似性などからも、これは変えたくあり
ません。

また、クラスを指定できるrescueに比べて、何を処理するのか明確さに
劣るように思えます。

代わりに、こういうものを思い付きましたがどうでしょうか。

  Iconv.open("utf-8", "euc-jp") {|cd|
    cd.on_illegal_sequence {|errinfo| ...}
    cd.iconv("\xa1\xa2")
  }

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦