У меня есть класс рубина, как это:переменного класс рубина в метаклассе
class C
@@v = 1
class << self
p @@v # everything goes well here
end
end
class << C
# here I get an exception
# `singletonclass': uninitialized class variable @@v in Object (NameError)
# from a.rb:5:in `<main>'
p @@v
end
Моего вопрос заключается в следующем: исключение сказало: «неинициализированная переменная класса @@ v в Object (NameError)», но почему рубиновый Lookups переменного класса в Object (main)?
Кажется, что Ruby всегда ищет переменные класса metaclass вне его.
Когда вы сделали «класс << с вы действительно используете самость, которая является основным , который находится под объектом, правильно? – vgoff
@vgoff Что означало: ** Когда вы делали «класс << c, вы действительно используете self ** – user2016971
В вашем втором классе << self definition, область main, снова. Однако в этой области нет переменной класса @@ v. Так вы не ожидаете получить эту ошибку? – vgoff