ruby中的access类变量

ruby中的access类变量,ruby,class,variables,Ruby,Class,Variables,为什么ruby中的类变量的行为不像静态变量,我如何只通过Mytest.value而不是Mytest.new.value访问它 class MyTest @@value=0 def value @@value end end puts MyTest.new.value [编辑]阅读评论,了解为什么不这样做 class MyTest @value=0 class << self attr_accessor :value end end 相

为什么ruby中的类变量的行为不像静态变量,我如何只通过Mytest.value而不是Mytest.new.value访问它

class MyTest
  @@value=0

  def value
    @@value
  end
end

puts MyTest.new.value

[编辑]阅读评论,了解为什么不这样做

class MyTest
  @value=0

  class << self
    attr_accessor :value
  end
end
相反,如果您确实需要以这种方式访问变量,我建议使用一个简单的模块


否则,就像Joshua Check在原始帖子中所评论的那样,您应该为类使用实例变量并具有访问器

class MyTest
  @@value = 0
  def self.value
    @@value
  end
end

self使其成为一个类方法,类直接调用。

虽然其行为类似,但类对象的类变量和实例变量之间有着重要的区别,最大的区别在于继承如何处理它们。另外,类你是对的,正确的方法是好的,这是你刚刚发布的答案。静态这个术语在Ruby中并不适用。最好不要使用类变量。我已经从我的工具箱中完全删除了它们。相反,在类上使用实例变量,如Erik所示。如果您的实例也需要访问它们,请为它们提供委托给类的方法。