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

From: take_tk <ggb03124@...>
Date: 2010-04-16 02:05:23 UTC
List: ruby-list #47023
たけ(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)=熊谷秀武


In This Thread