Инициализация переменной с помощью nil

p b #undefined local variable or method b for main:Object
a = nil
if a and (b=3)
  do_something_with b
end
p b # nil

почему b получает значение nil после выполнения блока if, в то время как ожидаемый результат будет undefined local variable or method b for main:Object, инициализирует ли Ruby все переменные в nil в память заранее ?

тот же случай со следующим кодом

if nil
  bb = 10
end
p bb # nil

кто-то пожалуйста, пролить свет на то, как Руби инициализирует переменные и что происходит в этом случае, спасибо

1 ответов


"[локальная переменная] инициализируется, если она появляется в левой части (перед знаком равенства (U+003D)) выражения присваивания, даже если выражение фактически не выполняется. Переменные последнего рода имеют значение nil."

EDIT: этот ответ указывал на довольно хорошую ссылку Ruby, которая, по-видимому, была заменена вредоносным сайтом. Я удалил ссылку, но сохранил цитату из ответа.