Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 递增类变量_Ruby_Class Variables - Fatal编程技术网

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