我有类似以下的东西
class A
def initialize
@var = 0
end
def dosomething
@var+=1
end
end
class B < A
def initialize
super
end
def func
puts @var
end
end
Run Code Online (Sandbox Code Playgroud)
问题是当我打电话
a = A.new
a.dosomething
b = B.new
Run Code Online (Sandbox Code Playgroud)
@var
返回的值是0
我将如何更改我的代码,以便它返回 var (1) 的“新”值?
快速回答,如果您真的了解类、继承和对象:将@var
(实例变量,因此在a
和 中不同b
)替换为@@var
(类变量,因此在 的所有实例中都相同class A
)。
否则,您的问题表明您对类、对象和继承的情况有根本的误解。
您的代码执行以下操作:
A
。这本质上是一个蓝图,您可以从中创建对象。
A
创建一个类型的对象时,该对象应该被赋予它自己的属性的私有副本,称为var
,该属性设置为0
。A
可以要求类型的对象dosomething
,这会将该对象的值增加var
1。B
,它是A
因此,在您的第二个代码段中,您创建了一个 object a
,它是一个A
. 它有自己的属性,称为var
,该属性设置为 0,然后递增。然后创建b
,它是一个B
(因此也是一个A
)。b
有自己的名为的属性var
,与 设置为 0 的a
's分开var
。
归档时间: |
|
查看次数: |
2389 次 |
最近记录: |