Ruby 递增类变量
我有以下代码:Ruby 递增类变量,ruby,class-variables,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 = Per
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
它输出创建的实例-3
我不明白为什么每次创建新的实例变量时,中的+=
会增加@@instance\u count
而不是将其重置为0
。每次创建新实例时,@@instance\u count
未重置为0
时会发生什么情况
名称以“@”开头的变量是self的实例变量。
实例变量属于对象本身
@foobar
类变量由类的所有实例共享,并以“@”开头
@@foobar
资料来源如下:
编辑
@@instance\u count
是一个类变量
它附加到类本身,而不是它的实例化。它是类定义的一部分,比如方法。
假设ruby解析了类代码后,它被创建并设置为0
使用new
(toto=Person.new“toto”
)创建此类的新实例时,将调用类构造函数。因此,@name
将被创建为新实例的局部变量,并且以前设置为0的@@instance\u count
将被识别并递增1
名称以“@”开头的变量是self的实例变量。
实例变量属于对象本身
@foobar
类变量由类的所有实例共享,并以“@”开头
@@foobar
资料来源如下:
编辑
@@instance\u count
是一个类变量
它附加到类本身,而不是它的实例化。它是类定义的一部分,比如方法。
假设ruby解析了类代码后,它被创建并设置为0
使用new
(toto=Person.new“toto”
)创建此类的新实例时,将调用类构造函数。因此,@name
将被创建为新实例的局部变量,并且以前设置为0的@@instance\u count
将被识别并递增1
名称以“@”开头的变量是self的实例变量。
实例变量属于对象本身
@foobar
类变量由类的所有实例共享,并以“@”开头
@@foobar
资料来源如下:
编辑
@@instance\u count
是一个类变量
它附加到类本身,而不是它的实例化。它是类定义的一部分,比如方法。
假设ruby解析了类代码后,它被创建并设置为0
使用new
(toto=Person.new“toto”
)创建此类的新实例时,将调用类构造函数。因此,@name
将被创建为新实例的局部变量,并且以前设置为0的@@instance\u count
将被识别并递增1
名称以“@”开头的变量是self的实例变量。
实例变量属于对象本身
@foobar
类变量由类的所有实例共享,并以“@”开头
@@foobar
资料来源如下:
编辑
@@instance\u count
是一个类变量
它附加到类本身,而不是它的实例化。它是类定义的一部分,比如方法。
假设ruby解析了类代码后,它被创建并设置为0
使用new
(toto=Person.new“toto”
)创建此类的新实例时,将调用类构造函数。因此,@name
将被创建为新实例的局部变量,而以前设置为0的@@instance\u count
将被识别并由1
递增,因为该变量只有一个实例。没有创建新的。可能您混淆了类变量(@@var
)和实例变量(@var
),因为该变量只有一个实例。没有创建新的。可能您混淆了类变量(@@var
)和实例变量(@var
),因为该变量只有一个实例。没有创建新的。可能您混淆了类变量(@@var
)和实例变量(@var
),因为该变量只有一个实例。没有创建新的。可能您混淆了类变量(@@var
)和实例变量(@var
)