けいじゅ@日本ラショナルソフトウェアです.

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 <<---