1
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

(这个问题有类似的标题,但它有不同的重点。)

4

1 回答 1

1

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

没有。范围不同。您@my_class_instance_variable在 的范围内定义MyClass,但试图在 ifMyClass的单例类的范围内访问它。

它很容易检查:

class Foo
  puts self #=> Foo

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

输出:

Foo
#<Class:Foo>
于 2016-10-18T09:28:15.810 回答