Что такое переменная класса как объекта?
чт, 02/08/2007 - 20:11 — spine
В следующем примере:
class Foo
@a = 123 # (1)
def foo
p @a # (2) ... nil, но не 123
end
end
Все классы в Ruby являются объектами класса Class, и у этих классов-объектов есть свои переменные объекта. В случае (1) @a - это переменная класса как объекта, а в случае (2) - это обычная переменная объекта, которая, не будучи инициализированной, равна nil. @a в случае (2) принадлежит принадлежит объекту класса Foo, а в случае (1) - объекту-классу Foo, который является объектом класса Class. Переменные объектов-классов недоступны из методов объекта.

Обсуждение
Re: Что такое переменная класса как объекта?
А можно пожалуйста поподробней. Особенно совсем не понятно: "@a в случае (2) принадлежит принадлежит объекту класса Foo, а в случае (1) - объекту-классу Foo". В чём разница между "объект класса" и "объект-класс" не с лингвистической, а с программно-технической перспективы?
Для чего и где можно применить следующий код? На что влияет строка (1), и как потом использовать @a?
class Foo
@a = 123 (1)
def foo
end
end
Re: Что такое переменная класса как объекта?
А можно пожалуйста поподробней. Особенно совсем не понятно: "@a в случае (2) принадлежит принадлежит объекту класса Foo, а в случае (1) - объекту-классу Foo". В чём разница между "объект класса" и "объект-класс" не с лингвистической, а с программно-технической перспективы?
Для чего и где можно применить следующий код? На что влияет строка (1), и как потом использовать @a?
class Foo
@a = 123 (1)
def foo
end
end
Re: Что такое переменная класса как объекта?
А можно пожалуйста поподробней. Особенно совсем не понятно: "@a в случае (2) принадлежит принадлежит объекту класса Foo, а в случае (1) - объекту-классу Foo". В чём разница между "объект класса" и "объект-класс" не с лингвистической, а с программно-технической перспективы?
Для чего и где можно применить следующий код? На что влияет строка (1), и как потом использовать @a?
class Foo
@a = 123 (1)
def foo
end
end