Когда я использую Class.new
, по какой-то причине класс переменных приведенных классов мешают друг другу:класса переменных странное поведение
# ruby 2.1.6p336 (2015-04-13 revision 50298) [i686-linux]
result = Class.new do
p self # #<Class:0xb7cd5624>
@@foo = 1
def foo
p @@foo
end
end
result2 = Class.new do
p self # #<Class:0xb7cd54d0>
@@foo = 2
def foo
p @@foo
end
end
result.class_variable_set(:@@foo, 3)
result.new.foo # expected 3, output 3
result2.new.foo # expected 2, output 3
Почему? Что происходит под капотом?
Также есть связанные предупреждения, но я не могу понять, что они означают, ни найти хорошее описание.
warning: class variable access from toplevel
Ближайшие ключи, которые я нашел до сих пор являются:
Доступ к переменной класса считается верхний уровень, потому что класс ключевое слово не определяет имя класса, который обеспечивал бы простор удерживайте переменную класса.
(с) http://japhr.blogspot.ru/2009/06/more-information-about-class-variables.html
Поскольку вы не создаете класс с
class
ключевым словом, переменная класса создается наObject
, неTest
(с) https://stackoverflow.com/a/10712458/1432640
Не могли бы вы подробно описать, почему это происходит и почему оно так отличается от wh ru Я использую ключевое слово class
?
Не знаете, почему это было приостановлено? –