在Ruby中添加属性到添加的实例变量

时间:2015-04-13 08:57:38

标签: ruby

我有以下代码将实例变量添加到对象

class MyClass
  def initialize(x)
    @var = x
  end
end

obj = MyClass.new(4)
obj.instance_variable_set(:@a, 5)

我可以动态地将attr_accessor添加到新添加的实例变量中吗? 或者我必须使用instance_variable_get()instance_variable_set() 得到并设定它?

1 个答案:

答案 0 :(得分:4)

您可以将attr_accessor发送到对象的单例类:

obj = MyClass.new(4)
obj.singleton_class.class_eval { attr_accessor :a }
obj.a = 5
obj.a #=> 5

这不会影响其他实例:

another_obj = MyClass.new(4)
another_obj.a #=> undefined method 'a'