gpt4 book ai didi

ruby - 实例变量继承

转载 作者:数据小太阳 更新时间:2023-10-29 06:36:47 25 4
gpt4 key购买 nike

有人可以解释一个类如何访问其父类(super class)的实例变量以及这不是继承吗?我说的是“The Ruby Programming Language”和例子

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, 2, 3)"

Point3D 类如何访问 to_s 中的 xy 如果它们不是继承的?书上说:

"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 语言中,父类(super class)和派生类都没有单独的对象。当您创建派生类的实例时,它也是父类(super class)的实例。有一个对象,它同时是两个类。

由于只有一个对象,所以只有一组实例变量。

这与所有其他 OO 系统相同。这本书关于运行哪种方法以及方法本身如何真正继承的方法有多么重要的奇怪论点并没有增加太多清晰度。

术语的问题是,当然,在动态类型系统中首先没有声明,因此子类的定义肯定不会继承任何字段声明......因为当然有没有。但是仅仅因为没有类型可以继承并不能使相反的说法(“实例变量不被继承”)更真实,而且它增加了相当多的困惑,因为它暗示父类会以某种方式不同 实例变量,这是试图以对象的方式谈论对象的荒谬结果。

关于ruby - 实例变量继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com