2016-10-18 55 views
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)具有相同的范围。为什么不能在Ruby中的单例类定义中访问类实例变量?

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

回答

1

我一个单独的类定义(类< <个体经营)的理解是 ,它具有相同的范围内为一类定义

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

这是很容易检查为:

class Foo 
    puts self #=> Foo 

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

随着输出:

Foo 
#<Class:Foo> 
+1

单例类 - 是的!非常感谢! –

相关问题