Чем отличаются переменные, начинающиеся с @, @@ и $?
Вопрос проверяет понимание различных типов переменных в Ruby и их областей видимости.
Короткий ответ
@ — переменная экземпляра, принадлежащая объекту.
@@ — переменная класса, общая для всех экземпляров класса.
$ — глобальная переменная, доступная из любого места программы.
Длинный ответ
Переменные экземпляра (@):
Сохраняют состояние внутри объекта и не доступны вне объекта напрямую. Они уникальны для каждого экземпляра класса.
class Person
def initialize(name)
@name = name
end
def name
@name
end
end
Переменные класса (@@):
Хранят общие данные, которые разделяются между всеми экземплярами класса.
class Counter
@@count = 0
def initialize
@@count += 1
end
def self.count
@@count
end
end
Глобальные переменные ($):
Доступны в любом месте программы, но их использование может усложнить отладку и поддержку кода.
$global_var = "I am global"
Используйте переменные экземпляра и класса для управления состоянием, избегайте глобальных переменных.