Запуска следующего кода:рубин возвращается неопределенным метод + для ноля: nilClass
# experiment
time = 5000
# when time reaches 10000, I'm off duty
def speedup_time(incre)
time += incre
yield(time)
end
puts "is the day over yet? #{speedup_time(2000){
if incre >= 10000
"yes: #{time}"
else
"no: #{time}"
end
}}"
Я столкнулся с этой ошибкой: undefined method "+" for nil:nilClass
.
Ruby должен 'поднять неопределенную локальную переменную или метод 'time'', но parser evulate' time' to 'nil' и я не могу понять, почему' time' равно 'nil' в' def' scope? –
@ Зелёный, потому что синтаксический анализатор видит это: 'time =', поэтому парсер создает переменную, называемую временем, и отмечает ее как локальную переменную. Это означает, что существует временная переменная, но ей еще не присвоено значение. Затем выполняется код, и возникает ошибка. Парсер будет делать это, даже если это невозможно для выполнения оператора присваивания, например. 'if false; время = 10; end' – 7stud