为什么不能在Ruby的单例类定义中访问类实例变量?

时间:2016-10-18 09:17:33

标签: ruby singleton class-instance-variables

class MyClass
  @my_class_instance_variable = "here"

  p @my_class_instance_variable # => "here"

  class << self
    p @my_class_instance_variable # => nil
  end
end

class MyClass
  p @my_class_instance_variable # => "here"
end

当第三个p打印nil时,为什么第二个p打印"here"?我对单例类定义(class << self)的理解是它与类定义(class MyClass)具有相同的范围。

(此question具有相似的标题,但它有不同的焦点。)

1 个答案:

答案 0 :(得分:1)

  

我对单例类定义(类&lt;&lt; self)的理解是   它与类定义具有相同的范围

不。范围不同。您在@my_class_instance_variable的范围内定义了MyClass,但是如果MyClass的单身类,则会尝试在范围内访问它。

检查如下:

class Foo
  puts self #=> Foo

  class << self
    puts self #=> #<Class:Foo>
  end
end

输出:

Foo
#<Class:Foo>