Почему нельзя получить доступ к переменной экземпляра класса в определении одноэлементного класса в Ruby?
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
).
(Этот вопрос имеет похожее название, но имеет другую направленность.)
1 ответ
Решение
Насколько я понимаю, определение одноэлементного класса (class << self) таково, что оно имеет ту же область видимости, что и определение класса.
Нету. Сфера отличается. Вы определили @my_class_instance_variable
в объеме MyClass
, но пытаемся получить к нему доступ, если MyClass
Синглтон-класс.
Это так же легко проверить, как:
class Foo
puts self #=> Foo
class << self
puts self #=> #<Class:Foo>
end
end
С выходом:
Foo
#<Class:Foo>