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

From: swec@...
Date: 2010-04-15 03:13:55 UTC
List: ruby-list #47018
東です。

ぼちぼちと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 中でクラス変数をアクセスするポータブルな方法は
あるのでしょうか?

--
ひろひと

In This Thread

Prev Next