From: Akinori MUSHA Date: 2002-04-11T06:52:56+09:00 Subject: [ruby-dev:16830] Re: Ruby Shim At Wed, 10 Apr 2002 05:21:54 +0900, Koji Arai wrote: > では、アイデアというかなんというかボツネタです。 > > NameError を StandardError のサブクラスに見せかけてみようと > 思いました。(最後に添付)。 > > しかし、version 1.6 では、rb_exc_new() が、rb_obj_alloc() を > 直接呼んでて NameError.new が呼ばれないために失敗しました。 > (ver 1.7 なら大丈夫なんですが)。  こういうケースはいろいろありますね。組み込みクラス内では、 直接 C 関数を呼んだり内部の変数を参照するために Ruby レベルで フックが掛けられないという。  今、 Hash::new {...}, Hash#default(key) をどうするか考えて いるところなんですが、 rb_hash_aref() が default() を呼ばず new や default= でセットした値を直接見ているので、簡単には 行きません。  おそらく Hash#[] と indices/indexes をオーバーライドして default() を呼ぶ形にすれば実用上いけるのではないかと思って いますが、どうかな。  コストとの兼ね合いがあるので、実装においてあまりに速度上の ペナルティが大きいものについては拡張ライブラリでやるというのも 視野には入れています。 > これで、1.6 のソース修正に走るのは反則ですよね(^^;  (主に後方)互換性への影響が薄ければ、まつもとさんをうまく説得 することで入れられるかもしれませんが、仰る通り本末転倒かも。 ;) -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Somewhere out of a memory.. of lighted streets on quiet nights.."