[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ソースコード完全解説」は、名著です。