新手问题 请问下 attr_internal 会用在哪些情况下?

R_Rboys · 2013年04月25日 · 1864 次阅读
class A
  attr_internal :name
  def my_name= name
    self.name = name
  end
  def my_name
    name
  end
end
a = A.new; a.name = "a"; a.instance_variables; #=> [:@_name]

class B < A; attr_accessor :name; end
b = B.new; b.name = "b"; b.instance_varialbes; #=> [:@name]

使用 attr_internal 时,会生成一个@_name的变量,其作用是为了防止子类的覆盖,如上面的 B 可是在上面的 B 类中,name 的方法已经给 attr_accessor :name 给覆盖了;那么当 b.my_name= "bb" 时,是@name 被赋予了"bb"而不是@_name;也就是说 attr_internal 的一点作用都没有,如果要一个@_name的变量,那我直接定义就可以了,为什么要用 attr_internal 来定义呢?

另外 attr_internal 会生成 name= 和 name 这两个方法;可是这两个方法会被 B 给覆盖,既然避免不了被覆盖,那我直接在 A 里用 attr_accessor 来定义就可以了;

请问下有人能告诉我 attr_internal 具体的作用么?

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号