我有这段代码:
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
时会发生什么?
答案 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
。
使用new
(toto = Person.new "Toto"
)创建此类的新实例时,将调用类构造函数。因此,@name
将被创建为新实例的局部变量,而@@instance_count
(先前已设置为0)将被1
识别并递增。