Ruby-读取另一个类中变量的值?

Ski*_*zit 0 ruby inheritance

我有类似以下的东西

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) 的“新”值?

Cho*_*ett 5

快速回答,如果您真的了解类、继承和对象:将@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