On Fri, 17 Oct 2003 12:38:31 +0900
In article <20031017033830.C88D045A800 / helium.ruby-lang.org>
[[ruby-list:38598] initializeから同じクラスのメソッドを呼ぶ]
Makoto Satoh <makotosato2 / yahoo.co.jp> 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