2016-10-18 49 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

單例類 - 是的!非常感謝! –

相關問題