我有类似以下的东西
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,这会将该对象的值增加var1。B,它是A因此,在您的第二个代码段中,您创建了一个 object a,它是一个A. 它有自己的属性,称为var,该属性设置为 0,然后递增。然后创建b,它是一个B(因此也是一个A)。b有自己的名为的属性var,与 设置为 0 的a's分开var。
| 归档时间: |
|
| 查看次数: |
2389 次 |
| 最近记录: |