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'