Переменные экземпляра в ruby не «определены» как таковые. Они появляются, когда их используют.
Когда вы в первый раз назначаете что-то переменной экземпляра, это ближе всего к «определению» (но на самом деле это скорее «инициализация»). Если вы ссылаетесь на переменную экземпляра, которой еще не присвоено значение, ее значение будет nil
.
Так что, если ваш конструктор не присваивает значение @color
, то @color
просто останется неинициализированным (и, таким образом, вернет nil
в любом месте класса, который ссылается на него ..., если ему не назначено значение в другом месте вне конструктора).
Смотрите здесь для получения дополнительной информации: http://www.rubyist.net/~slagell/ruby/instancevars.html
Соответствующая цитата из статьи:
Переменные экземпляра не нужно объявлять. Это указывает на
гибкая структура объекта; фактически каждая переменная экземпляра
динамически добавляется к объекту при его первом назначении.
И
Как и в случае глобальных переменных, переменные экземпляра имеют значение nil до
инициализируется.