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