From: take_tk Date: 2010-04-16T11:05:23+09:00 Subject: [ruby-list:47023] Re: [Q] instance_eval 中でのクラス変数のアクセス たけ(tk)です [ruby-list:47021] Re: [Q] instance_eval 中でのク ラス変数のアクセス にて swec@youko-house.ne.jp さん曰く: > また、クラス変数を操作する場合は以下のようになるのですよね。 > > # 他の値を加える。 > tmp = c.class.class_variable_get(:"@@xxxx") > tmp += other_value > c.class.class_variable_set(:"@@xxxx", tmp) > > # メソッドをよぶ > c.class.class_variable_get(:"@@xxxx").my_method( "arg" ) > > > さて、実際のプログラムでは、instance_evalブロック中でさらにerbを > 使おうと考えていまして、テンプレート中に c.class.class_variable_get(:"@xxxx")を > 書かせるのは、ちょっとどうかなという感じがします。 クラス変数を外部から自由に扱いたい(+それでかまわ ない)というのであるなら、クラス変数へのアクセサを 定義するのが吉。 class Class1 @@class_var1 = "c1" #cattr_accessor :class_var1 def self.class_var1 @@class_var1 end def self.class_var1=(v) @@class_var1 = v end 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 self.class.class_var1 # p @@class_var1 self.class.class_var1 = "c1_2" func1() end Take_tk = KUMAGAI Hidetake たけ(tk)=熊谷秀武