[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:1087

From: SASADA Koichi <ko1 atdot.net>
Date: Sat, 19 Aug 2006 00:47:49 +0900
Subject: [yarv-dev:1087] Re: open> class_eval in class method

 ささだです.

 これは,ブロックのスコープが private (トップレベルなので)だから,と
いうことなんですが,これが仕様です,とは言えませんかねえ.無理やり変えな
いとダメですか.


sheepman wrote:
> こんにちは、sheepman です。
> クラスメソッドの中で、クラスにメソッドを定義するために class_eval を
> 呼ぶと、定義されたメソッドが private になります。module_eval でも
> 同様です。
> 
> 
> $ cat t.rb
> class C
>   def self.def_mthd(&b)
>     class_eval(&b)
>   end
> end
> 
> C.def_mthd {
>   def answer()
>     'kotae'
>   end
> }
> 
> p C.new.answer
> 
> $ ruby-2.0 -v t.rb
> ruby 2.0.0 (Base: Ruby 1.9.0 2006-04-08) [i686-linux]
> YARVCore 0.4.1 Rev: 527 (2006-07-19) [opts: [direct threaded code] [inline method cache] ]
> t.rb:13:in `<main>': private method `answer' called for #<C:0x40295d5c> (NoMethodError)
> 
> $ ruby-1.9 -v t.rb
> ruby 1.9.0 (2006-07-19) [i686-linux]
> "kotae"
> 
> $ ruby-1.8 -v t.rb
> ruby 1.8.5 (2006-07-21) [i686-linux]
> "kotae"
> 


-- 
// SASADA Koichi at atdot dot net


--
ML: yarv-dev quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

      1064 2006-07-22 16:21 [sheepman sheepman.sa] open> class_eval in class method        
->    1087 2006-08-19 00:47 ┗[ko1 atdot.net       ]