Я вижу проблему с использованием переменных класса в Ruby; однако кажется, что документации от RuboCop для решения проблемы недостаточно.
Теперь я мог просто игнорировать это. Учитывая мой проект, это не имеет значения. Но я просто хочу знать, что Рубокоп пытается мне сказать, потому что это не имеет смысла.
Выполнение предоставленного кода в irb 0.9.6
с Ruby 2.5.1
дает:
class A
@test = 10
end
#=> 10
class A
def test
@@test # you can access class variable without offense
end
end
#=> :test
A.new.test
Traceback (most recent call last):
3: from /Users/Ricky/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
2: from (irb):12
1: from (irb):9:in `test'
NameError (uninitialized class variable @@test in A)
Did you mean? @test
Итак, нет. Мы, очевидно, не можем получить доступ к переменной класса без обид. irb был очень оскорблен. Но ruby предлагает использовать @test
. Может, это была просто опечатка? Давай попробуем:
class A
@test = 10
def test
@test # you can access class variable without offense
end
end
#=> :test
A.new.test
#=> nil
Таким образом, переменная экземпляра никогда не была определена. Что здесь пытается сказать Рубокоп?