我理解类变量应该以@@. 现在我有这个类:
class C
  @v = "my variable"
  def self.get_v
    @v
  end
end
puts C.get_v  #returns "my variable"
@v仍然是类变量吗?但它没有@@?
不,它是类实例变量,即类对象的实例变量C。
两者的区别在于前者在层次结构的所有类中可见,后者仅在定义它的类中可见。一个简单的例子(我希望)解释:
class A
  @a = 0  # class instance variable
  @@b = 1  # class variable
end
class B < A
  @a = 1
  @@b = 2
end
puts A.a # => 0
# the definition of @@b inside B have altered the value
# inside A. It's not the case for @a.
puts A.b # => 2
    不,它不是类变量。这是一个常规的实例变量。但它属于Class对象的一个实例。重要的是不要混淆两者。
做如下自省,你会得到答案:
class C
  @v = "my variable"
  def self.get_v
    defined? @v
  end
end
puts C.get_v  #=> instance-variable
class C
  @v = "my variable"
  def self.get_v
    self.instance_variables
  end
end
puts C.get_v  #=> @v
这意味着@v是类实例变量。
class C
  @v = "my variable"
  def self.get_v
    self.new.instance_variables
  end
end
p C.get_v  #=> [] 
这是因为@v不是的实例的实例变量class C。
您也可以对类变量进行同样的自省:
class C
  @@v = "my variable"
  def self.get_v
    defined? @@v
  end
end
p C.get_v  #=> "class variable
总之,我可以说像上面那样向你的对象提出问题,它有你的答案。