ruby – 实例变量继承

前端之家收集整理的这篇文章主要介绍了ruby – 实例变量继承前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人可以解释一个类如何访问其超类的实例变量,以及如何不继承?我在说“ Ruby编程语言”和例子
class Point
  def initialize(x,y) # Initialize method 
     @x,@y = x,y      # Sets initial values for instance variables
  end

end

class Point3D < Point
 def initialize(x,y,z)
   super(x,y)
   @z = z
 end
 def to_s
   "(#@x,#@y,#@z)"  # Variables @x and @y inherited?
 end
end

Point3D.new(1,2,3).to_s => "(1,3)"

如果Point3D类不能继承,那么在to_s中如何访问x和y?这本书说:

“The reason that they sometimes appear to be inherited is that instance variables are created by the methods that first assign values to them,and those methods are often inherited or chained.”

但我无法弄清楚它是什么意思.

解决方法

你是对的,这本书是错误的,或者说至少说得不好

我会认为这本书是错误的,或者说,这本书是一个很浑浊的解释.

在所有OO语言中,超类和派生类没有单独的对象.当您创建派生类的实例时,它也是超类的一个实例.有一个对象,它同时是两个类.

由于只有一个对象,只有一组实例变量.

这与所有其他OO系统相同.书中所说的关于如何运行哪种方法以及方法本身是真正继承的方法的奇怪论据在清晰度方面并没有增加太多.

这个术语的问题是,确实,在一个动态类型的系统中,首先没有声明,所以当然这个子类的定义不会继承任何字段声明,因为当然没有任何.但是只是因为没有类型继承不会使相反的语句(“实例变量不被继承”)更真实,并且它增加了相当多的混乱,因为它意味着父母会有不同的实例变量,这是试图以他们所做的方式谈论对象的荒谬结果.

猜你在找的Ruby相关文章