Отсутствует разница между областями действия переменных.
class A
@test = 42
end
Выше объявляется переменная экземпляра в области видимости класса.Он доступен как
A.instance_variable_get(:@test)
#⇒ 42
. Вы можете определить метод доступа для этой переменной:
class A
@test = 42
def self.test
@test
end
end
A.test #⇒ 42
Он используется для всех экземпляров, и для доступа к нему из экземпляров следует обратиться к классу:
# ⇓⇓⇓⇓⇓ HERE
A.new.class.test #⇒ 42
Следующий код объявляет переменную экземпляра в экземплярах класса :
class A
def initialize
@test = 42
end
end
Доступ к ней можно получить из instance из A
:
A.new.instance_variable_get(:@test)
#⇒ 42
Переменные класса имеют некоторые недостатки при использовании в иерархии классов, поэтому [вероятно] поэтому Rubocop предлагает не использовать переменные класса (или все, что он предлагает - ячестно говоря, никогда не использовал его, так как это приносит больше вреда, чем помощи IMSO.)
В своем первом фрагменте вы пропустили @
.Правильный код будет:
class A
# ⇓⇓ HERE
@@test = 10
end
class A
def test
@@test # you can access class variable without offense
end
end