我今天在一些代码中看到了这一点。
class Foo
def self.bar
@myvar = 'x'
end
end
这访问到底是什么?据我所知,这是实例方法无法访问的。这叫什么(google-able),因为我似乎无法在其他任何地方找到这样的例子。
答案 0 :(得分:7)
@myvar
语法将myvar
标识为实例变量,因此真正的问题是:
类方法中的
self
是什么?
答案是“self
是类对象”。因此,@myvar
是Foo
类对象的实例变量。如果您添加另一个类方法:
class Foo
def self.pancakes_house
@myvar
end
end
然后这样做:
Foo.bar
puts Foo.pancakes_house
您会在标准输出上看到x
。
答案 1 :(得分:3)
类也是一个对象,因此您要在类Foo中设置一个实例变量。
>> Foo.bar
>> Foo.instance_variable_get("@myvar")
=> 'x'
现在,对于典型用途,将class << self; attr_accessor :myvar; end
添加到您的班级,您可以写:
>> Foo.bar
>> Foo.myvar
=> 'x'
答案 2 :(得分:1)
对于谷歌搜索,这有时被称为“类实例变量”。也就是说,恰好是一个类的对象的实例变量。