我刚学会了php中的静态变量。红宝石中有类似的东西吗?
例如,如果我们要创建一个Student
类,并为我们创建的每个student
对象创建一个,那么它的id号应该会自动增加。
我认为创建类变量是静态的。
答案 0 :(得分:103)
类变量在所有实例之间共享(这就是它们被称为类变量的原因),因此它们可以执行您想要的操作。它们也是遗传的,有时会导致相当混乱的行为,但我认为这不会成为一个问题。下面是一个类的示例,该类使用类变量来计算已创建的实例数:
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
答案 1 :(得分:14)
使用接受的答案作为静态变量的定义可能很危险,这是我在很多Ruby代码中看到的常见错误。
像@@foos
这样的东西在 ALL 子类之间共享。但是,大多数程序员都希望静态变量在定义它们的类中具有范围 。
如果您正在寻找大多数语言意义上的静态变量,其范围只是他们自己的类,请查看this SO answer
此博客文章还有一个很好的例子,说明了大多数程序员会得到的惊喜:
http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/