如何在类范围内创建和引用动态创建的类变量

时间:2017-04-14 01:25:52

标签: ruby

我想在foo1的范围内引用动态创建的类变量foo2foo3sum_class_vars,而不知道它们的标识符是什么。例如,让我们实现一个sum函数,它对变量求和。

    class Test
      def initialize
      end

      def sum_class_vars
      end
    end

    t = Test.new
   #add class variables foo1 foo2 foo3 to Test 

我该怎么做?

2 个答案:

答案 0 :(得分:2)

与通常的变量一样,但仅在声明后使用:

class Test      
  def initialize
  end

  def sum_class_vars
    foo1 + foo2 + foo3
  end
end

t = Test.new

class << t
  attr_accessor :foo1, :foo2, :foo3
end

t.foo1 = t.foo2 = t.foo3 = 2

p t.sum_class_vars
#=> 6

答案 1 :(得分:0)

class Test
  def sum_instance_vars
    foo1 + foo2
  end
end

Test.send(:attr_accessor, :foo1, :foo2, :foo3)

t1 = Test.new
  #=> #<Test:0x007fe12c014838> 
t1.foo1 = 1
t1.foo2 = 2
t1
  #=> #<Test:0x007fe12c014838 @foo2=2, @foo1=1> 
t1.sum_instance_vars
  #=> 3 

@foo1@foo2实例变量,而不是类变量(或类实例变量)。< / p>