Как говорится, вместо тысячи слов. Почему переменные класса - это зло? Есть простой код:
class Animal
@@count = 0
def self.inc
@@count += 1
end
def self.count
@@count
end
end
class Cat < Animal
@@count = 100
def self.count
@@count
end
end
Animal.inc
puts Animal.count
Что он вернёт? Внезапно, 101. Почему? Потому что
@@count затирается в потомке. Surprise! Кстати, этот тест имеется на одном сайте как часть собеседования в Сбербанк. Я бы очень не хотел работать в компании, которая спрашивает вот такое (и ещё интересуется, можно ли вызвать лямбду через
->() {}() и
->(){}[]). Это называется "месье знают толк в извращениях". Я не припомню ни одного случая за много лет, когда подобные знания мне потребовались