gpt4 book ai didi

ruby - 在Ruby中,为什么需要初始化子类变量?

转载 作者:数据小太阳 更新时间:2023-10-29 08:48:59 24 4
gpt4 key购买 nike

我有一个类 Foo,我创建了一个子案例 Bar。如果 @foo_count 已经在父类中初始化,为什么我必须在子类中初始化它?

请指教?

class Foo
@foo_count = 0
end

class Bar < Foo
@foo_count = 100
end

最佳答案

为什么会这样?好的,让我这样告诉你:

class Foo
@foo_count = 0
end

class Bar < Foo;end

Bar.instance_variables # => []
Foo.instance_variables # => [:@foo_count]

@foo_countFoo类实例变量。每当您要从父类(super class)Foo 创建像Bar 这样的子类时,不要认为类实例变量会继承到类Bar 。现在看——

class Foo
@foo_count = 0
end

class Bar < Foo
@foo_count = 10
end

Bar.instance_variables # => [:@foo_count]
Foo.instance_variables # => [:@foo_count]

现在对象 FooBar 都有他们的实例变量,只是有相同的名字 @foo_count ,这并不意味着他们共享同一个实例变量。每个对象总是有自己的实例变量副本。

这里还有一些例子可以让你更清楚:-

class Foo
@foo_count = 0
def self.meth_foo
@foo_count
end
end

class Bar < Foo
#@foo_count = 10
end

Foo.meth_foo # => 0
Bar.meth_foo # => nil

但是现在——

class Foo
@foo_count = 0
def self.meth_foo
@foo_count
end
end

class Bar < Foo
@foo_count = 10
end

Foo.meth_foo # => 0
Bar.meth_foo # => 10

关于ruby - 在Ruby中,为什么需要初始化子类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579322/

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