[ruby-list:47019] Re: [Q] instance_eval 中でのクラス変数のアクセス

From: Sora Harakami <sora134@...>
Date: 2010-04-15 04:53:49 UTC
List: ruby-list #47019
ソラです。

Module#class_variable_getではどうでしょう。

p c.class.class_variable_get(:"@@class_var1")



2010/4/15  <swec@youko-house.ne.jp>:
> 東です。
>
> ぼちぼちとRubyを使っていますが、また躓いてしまいまして、
> 先達のお知恵を拝借したいと思いメールしました。
>
>
> 「やりたいこと」
> instance_eval の中で、クラス変数をアクセスしたい。
>
>
> 「テストコード」
> class Class1
>  @@class_var1 = "c1"
>
>  def initialize()
>    @instance_var1 = "i1"
>  end
>
>  def func1()
>    p @instance_var1
>    p @@class_var1
>  end
> end
>
> c = Class1.new
> c.instance_eval do
>  func1()
>  p @instance_var1
>  p @@class_var1
> end
>
> このコードを実行すると、instance_evalブロック中、func1()の呼出は
> 成功するのに、p @@class_var1 は、以下のエラーでNGでした。
>  uninitialized class variable @@class_var1
>
>
> それではと、
> Class1.class_eval do
>  c.instance_eval do
>    func1()
>    p @instance_var1
>    p @@class_var1
>  end
> end
>
> このようにコードを変更したところ、ruby1.9.1ではOKで、
> ruby1.8.7では同じエラーです。
>
> 上の変更が適正なものかも、私には定かではないですが、
> instance_eval 中でクラス変数をアクセスするポータブルな方法は
> あるのでしょうか?
>
> --
> ひろひと
>
>



-- 
Sora Harakami - sora134[at]gmail.com
Blog: http://codnote.net/
Twitter: http://twitter.com/sora_h
Skype: sora_harakami

In This Thread