1

如果你环顾四周,你会发现类变量与类实例变量的一些比较,我听到的关于类变量的最好的说法是“这可能是你想要的”,但我从未听过有人说这就是他们想要的,或者在整个继承树中共享变量的情况可能更有用。

所以在实践中,什么时候类变量比类实例变量更好?

4

2 回答 2

1

另一个例子(你想要每个对象的唯一名称)

class Foobar
    @@uniqueId = 0        
    def initialize
       @@uniqueId += 1
    end        
    def unique_name
       "Foobar_" + @@uniqueId.to_s
    end
end
a = Foobar.new
puts a.unique_name

a = Foobar.new
puts a.unique_name

这将输出

Foobar_1

Foobar_2

编辑:单例模式也是静态变量链接的好例子

于 2012-11-02T09:06:32.527 回答
0

最简单的示例是您使用类变量来存储该类的一些概览状态或所有实例的共享状态。

class Foobar
  @@total = 0

  def initialize
    @@total += 1
  end

  class << self
    def all
      @@total
    end
  end
end

5.times { Foobar.new }
Foobar.all #=> 5

所以这里@@total将向您显示总共创建了多少个实例。

Rails 的ActiveRecord#FinderMethods#all只返回数组的大小。但是如果一个类的所有实例都没有包装在一个数组中,那么使用类变量返回“all”也是一种解决方案。

于 2012-11-02T08:57:45.260 回答