On Thu, 7 Nov 2002 03:56:33 +0900
Takashi Kanai <kanai / nn.iij4u.or.jp> wrote:

> ---- test1 ------------------
> class AAA
>   @@VVV = "xyz"
>   def AAA.test
>     p @@VVV
>   end
> end
> AAA::test     #=> "xyz"
> AAA.new.test  #=> "xyz"
> -----------------------------
> 実行結果
> "xyz"
> test2.rb:8: private method `test' called for #<AAA:0x2beb260> (NameError)
> 
> クラスメソッドを直接呼び出すのはOKのようですが、インスタンスから
> 呼び出すのはエラーです。privateメソッドを呼び出したと言っているよう
> ですが、なぜそうなるのか分かりません。

AAA.new.test は AAA.test を呼んだことにはなりません。C++ などと
は違いインスタンスから直接クラスメソッド(クラスの特異メソッド)
は呼べません。

メッセージが private method 〜 になるのは,AAA#test を呼ぼうとし
てクラス階層を降り,Kernel#test (関数 test) にたどり着いて呼ぼう
としたのが原因です。組み込み関数は private だからです。

`test' ではなく `foo' などの Object でも Kernel でも定義されてい
ないメソッド名にすれば undefined method `foo' になります。


> ---- test2 ------------------

こっちはパス^^;
何となくバグっぽいですが…


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