[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [dennou-ruby:001290] Re: initialize mathod



  常定@国立天文台です。ML に入れていただいているのに長らく
音信/貢献なしですみません。

> Cで書かれたClassの subClassの initializeメソッドは
> new時に呼び出されないみたいなんですけど
> これって仕様なんでしょうかね

horinout> C で書いてあるか否かというより、new が initialize を呼ぶ
horinout> ようになっているかどうかでしょう。例えば Array のソースを見ると
horinout> initialize というメソッドが定義してあって、new はそれを呼ぶよう
horinout> に見えます。しかし、NArray はそうなってないということでしょう
horinout> から、意図する通りのことをしようと思ったら new を(orも)再定義す
horinout> るか、NArray を改訂するしかないでしょうね。

 これは堀之内さんのおっしゃる通りですね。スーパークラスの new が
initialize を呼ばないなら、それを継承したクラスからは決して呼ば
れません。呼びようがないんですね。new を再定義する必要があります。
「あるクラスを継承して作った(サブ)クラスの new は initialize を
呼ばない」という仕様ではありません。
 蛇足ながら、new はメソッドではなくクラスメソッドですのでたまに
混乱することがあります。

# 近頃刊行された青木氏著「Rubyソースコード完全解説」は、名著です。