Почему так? Хорошо Позвольте мне сказать вам, то так:
class Foo
@foo_count = 0
end
class Bar < Foo;end
Bar.instance_variables # => []
Foo.instance_variables # => [:@foo_count]
@foo_count
экземпляр класса переменной класса Foo
. Всякий раз, когда вы создадите подкласс, такой как Bar
, из суперкласса, такого как Foo
, не думайте, что переменная экземпляра класса будет унаследована классу Bar
. Теперь посмотрим, -
class Foo
@foo_count = 0
end
class Bar < Foo
@foo_count = 10
end
Bar.instance_variables # => [:@foo_count]
Foo.instance_variables # => [:@foo_count]
Теперь как объект Foo
и Bar
имеют свою переменную экземпляра, имеющие одинаковое имя @foo_count
только, что не означает, что они разделяют один и тот же экземпляр variable.Each объект всегда имеет свою собственную копию переменные экземпляра.
Вот еще некоторые примеры, чтобы получить вещи ясно вам: -
class Foo
@foo_count = 0
def self.meth_foo
@foo_count
end
end
class Bar < Foo
#@foo_count = 10
end
Foo.meth_foo # => 0
Bar.meth_foo # => nil
Но теперь -
class Foo
@foo_count = 0
def self.meth_foo
@foo_count
end
end
class Bar < Foo
@foo_count = 10
end
Foo.meth_foo # => 0
Bar.meth_foo # => 10