Инициализация переменной с помощью 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, которая, по-видимому, была заменена вредоносным сайтом. Я удалил ссылку, но сохранил цитату из ответа.