Я смотрел этот видео. Почему a = a оценивается как nil, если a не определено?
a = a # => nil
b = c = q = c # => nil
Ответ 1
Ruby-интерпретатор инициализирует локальную переменную с nil, когда видит назначение. Он инициализирует локальную переменную до того, как она выполнит выражение присваивания, или даже когда назначение недоступно (как в примере ниже). Это означает, что ваш код инициализирует a с помощью nil, а затем выражение a = nil будет оценивать значение правой руки.
a = 1 if false
a.nil? # => true
Первое выражение присваивания не выполняется, но a инициализируется nil.