@里面用一个自我方法究竟做了什么?

时间:2011-06-15 22:59:20

标签: ruby

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

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

这访问到底是什么?据我所知,这是实例方法无法访问的。这叫什么(google-able),因为我似乎无法在其他任何地方找到这样的例子。

3 个答案:

答案 0 :(得分:7)

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

  

类方法中的self是什么?

答案是“self是类对象”。因此,@myvarFoo类对象的实例变量。如果您添加另一个类方法:

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)

对于谷歌搜索,这有时被称为“类实例变量”。也就是说,恰好是一个类的对象的实例变量。