Ruby @里面用的一个自我方法到底是做什么的?

Ruby @里面用的一个自我方法到底是做什么的?,ruby,Ruby,我今天在一些代码中看到了这一点 class Foo def self.bar @myvar = 'x' end end 这到底是什么?据我所知,这是不可访问的表单实例方法。这叫什么(谷歌能做的),因为我在其他地方找不到这样的例子 语法将@myvar标识为实例变量,因此真正的问题是: 类方法中的self是什么 答案是“self是类对象”。因此,@myvar是Foo类对象的实例变量。如果添加其他类方法: class Foo def self.pancakes_hous

我今天在一些代码中看到了这一点

class Foo
  def self.bar 
    @myvar = 'x'
  end 
end 

这到底是什么?据我所知,这是不可访问的表单实例方法。这叫什么(谷歌能做的),因为我在其他地方找不到这样的例子

语法将
@myvar
标识为实例变量,因此真正的问题是:

类方法中的
self
是什么

答案是“
self
是类对象”。因此,
@myvar
Foo
类对象的实例变量。如果添加其他类方法:

class Foo
    def self.pancakes_house
        @myvar
    end
end
然后这样做:

Foo.bar
puts Foo.pancakes_house

您将在标准输出上看到
x

类也是一个对象,因此您正在类Foo中设置一个实例变量

>> Foo.bar
>> Foo.instance_variable_get("@myvar") 
=> 'x'

现在,对于一个典型的用法,为谷歌添加
class,这有时被称为“类实例变量”。也就是说,一个对象的实例变量恰好是一个类。

接下来的问题是:Ruby社区是否相信使用它们是否是好的实践?(它马上就冲我跳出来,说我不是线程安全的。)@John:我不知道是否有普遍的共识,我从来都不需要这样的东西。如果出于某种原因,您需要一个从实例中隐藏的类变量,那么您可能会这样做。
>> Foo.bar
>> Foo.myvar
=> 'x'