attr_accessor内部视图

时间:2012-03-02 11:52:41

标签: ruby

我是Ruby的新手

我们可以说attr_accessor :bark

是糖衣

 def bark
    @bark
  end

  def bark=(val)
    @bark = val
  end

给定多个参数时会有什么相同的 是吗?

attr_accessor *args
    args.each { |attr|
     def attr
            @attr
          end

          def attr=(val)
            @attr= val
          end
    }

如果是这样,我怎样才能使用相同的初始化所有给定的参数

class_eval (Meta OOP),动态 attr + random_str

1 个答案:

答案 0 :(得分:1)

东西

attr_accessor *args
  args.each { |attr|
   def attr
     @attr
   end

   def attr=(val)
     @attr= val
   end
 }

不起作用。它将创建一个方法“attr”,它返回实例变量“@attr”的值。我想那不是你想做的,对吧?你应该做

args.each do |arg|
  self.define_singleton_method arg do self.instance_variable_get arg end
end

对于getter和几乎相同的东西为setter。

我不知道你的意思
  

如果是这样的话我怎样才能使用相同的初始化所有给定的参数   并在class_eval(Meta OOP)中使用动态attr + random_str?

问候