红宝石中的静态变量

我刚刚学习了 PHP 中的静态变量 Ruby 中有类似的东西吗?

例如,如果我们想创建一个 Student类,并且对于我们创建的每个 student对象,它的 id 号应该自动递增。

我认为创建静态类变量就可以了。

88857 次浏览

类变量在所有实例之间共享(这就是为什么它们被称为类变量) ,因此它们可以做您想做的事情。他们也是遗传的,有时会导致相当混乱的行为,但我不认为这将是一个问题在这里。下面是一个类的例子,它使用一个类变量来计算已经创建了多少个类实例:

class Foo
@@foos = 0


def initialize
@@foos += 1
end


def self.number_of_foos
@@foos
end
end


Foo.new
Foo.new
Foo.number_of_foos #=> 2

使用公认的答案作为静态变量的定义可能是危险的,这是我在许多 Ruby 代码中看到的常见错误。

类似 @@foos的东西在 全部子类之间共享。但是,大多数程序员希望静态变量在定义它们的类中具有范围 只有

如果您正在寻找大多数语言意义上的静态变量,其范围只是它们自己的类,那么请看 这么回答

此外,这篇博客文章还提供了一个很好的例子,说明大多数程序员会得到的惊喜:

Http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/