增加一个类变量

时间:2014-05-03 19:10:45

标签: ruby class-variables

我有这段代码:

class Person
  @@instance_count = 0

  def initialize name
    @name = name
    @@instance_count += 1
  end
  def self.instance_count
    p "Instances created - #{@@instance_count}"
  end
end

person_1 = Person.new "first_name"
person_2 = Person.new "second_name"
person_3 = Person.new "third_name"

Person.instance_count

输出"Instances created - 3"

我不明白为什么+= initialize增加@@instance_count,并且每次创建新的实例变量时都不会将其重置为0。每次创建新实例时@@instance_count未重置为0时会发生什么?

1 个答案:

答案 0 :(得分:3)

  

名称以' @'开头的变量是self的实例变量。   实例变量属于对象本身。

@foobar
     

类变量由类的所有实例共享,并以' @@'开头。

@@foobar

以下是来源:http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Variables_and_Constants#Instance_Variables

修改

# This is a class
class Person
  @@instance_count = 0

  # This is the class constructor
  def initialize name
    @name = name
    @@instance_count += 1
  end

  def self.instance_count
    @@instance_count
  end
end

# This is an instance of Person
toto = Person.new "Toto"
# This is another instance of Person
you  = Person.new "Trakaitis"

p Person.instance_count # 2

@@instance_count是一个class variable,它附加到类本身,而不是它的实例化。它是类定义的一部分,例如方法。 我们假设一旦ruby解析了您的类代码,它就会被创建并设置为0

使用newtoto = Person.new "Toto")创建此类的新实例时,将调用类构造函数。因此,@name将被创建为新实例的局部变量,而@@instance_count(先前已设置为0)将被1识别并递增。