けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev:18046] the message: "[ruby-dev:18046] Re: allocation framework", on Aug/20 17:57(JST) Tanaka Akira writes: >ふと気がついたんですが、core を出せるのは allocation framework のせい >じゃありませんね。 > >% ./ruby -e ' >class << Object >alias obj_new new >end >p Hash.obj_new' >-e:5: [BUG] Segmentation fault >ruby 1.6.7 (2002-08-19) [i386-freebsd4.2] > >というように 1.6 でも同じ理屈で出せるので。 うーん.... >それはそれとして、allocate や new を alias するとスーパークラスの構造 >でサブクラスのメソッドを動かせるわけですが、逆に、他のメソッドを alias >するとスーパークラスのメソッドをサブクラスの構造で動かせます。これはサ >ブクラスの構造はスーパークラスのメソッドが想定する構造の拡張になってい >ないといけないということなんでしょうか? これ, 昔のsuper undefの話([ruby-dev:1553], [ruby-dev:1640], [ruby-dev:1641, etc.])と根が同じなんですね. 似てるのではとは思っていま したが, ここまで整理されるまではっきりとは思っていませんでした. で, def Hash.newをするときに super_undef new していますよね? aliasされ たときに, super_undef obj_newすれば良いかと思いますが? ただ, super_undefの対象はObjectじゃなくてサブクラス側ですので, すべてのサブ クラスをチェックしないといけなくなりますが... まあ, aliasはコストがか かってもいいので... __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju / rational.com <<---