From: Tietew Date: 2003-10-17T13:23:43+09:00 Subject: [ruby-list:38599] Re: initializeから同じクラスのメソッドを呼ぶ On Fri, 17 Oct 2003 12:38:31 +0900 In article <20031017033830.C88D045A800@helium.ruby-lang.org> [[ruby-list:38598] initializeから同じクラスのメソッドを呼ぶ] Makoto Satoh wrote: > クラスAのinitializeで、インスタンス変数@fooを初期化する > のに少し処理が必要なので、同じクラスAのインスタンスメソ > ッドとして定義しました。 > > class A > def initialize > @foo = init_foo() > end > attr_reader('foo') > > def init_foo > ... > end > private :init_foo > end > > 後ほど、このクラスAのインスタンスaを作ると、a.fooがちゃ > んと値を返します。 > > この場合、init_fooは、 > > (1) initializeの中で@fooの初期化時に呼ばれて実行されてい > る、 > (2) a.fooが呼ばれたときに実行される、 > > のどちらでしょうか? あるいは、まったく別でしょうか? (1) です。ちゃんと言えば initialize で init_foo が呼ばれ,その戻 り値をもって @foo が初期化されます。 > Java(の知識もあいまいですが)では、init_fooはインスタンス > メソッドであり、クラスAのコンストラクタ中では呼べないと > 思いました。 Java でもコンストラクタ中にインスタンスメソッドは呼べたはずです が… "C++" の「コンストラクタでは仮想関数を呼べない」と勘違いし ていませんか? —[ Tietew ]—————————————————————————— メ : tietew@tietew.net / tietew@raug.net / tietew@masuclub.net ホペ: http://www.tietew.net/ Tietew Windows Lab. http://www.masuclub.net/ 鱒倶楽部 指紋: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA