这还是一个类变量吗?

Bal*_*ala 1 ruby variables class

我理解类变量应该从一开始@@.现在我有这个课:

class C
  @v = "my variable"

  def self.get_v
    @v
  end
end

puts C.get_v  #returns "my variable"
Run Code Online (Sandbox Code Playgroud)

@v仍然是一个类变量?但它没有@@

tor*_*o2k 5

不,它是一个类实例变量,即类对象的实例变量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
Run Code Online (Sandbox Code Playgroud)