类变量何时实际有用?

时间:2012-11-02 08:49:43

标签: ruby

如果你环顾四周,你find some comparisons of class variables to class instance variables,我听过的关于类变量的最好的是“那可能就是你想要的”,但我从来没有听到有人说他们想要什么,或者在整个继承树中共享变量的情况可能更有用。

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

2 个答案:

答案 0 :(得分: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

编辑:单例模式也是静态变量link

的好例子

答案 1 :(得分: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”也是一种解决方案。