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 具体的作用么?