Учитывая следующий код:
a = true # let's assign `a` a value
# and let's test if calling `b`, an unassigned variable, throws an error
begin
puts "The value of b is: #{b.inspect}"
rescue NameError => e
puts "Caught an error: #{e}"
end
a || b = true # the assignment should never be executed because `a` is `true`
puts "The value of b is: #{b.inspect}" # will calling `b` still raise an error?
Мы получаем следующий результат:
Caught an error: undefined local variable or method `b' for main:Object
The value of b is: nil
Даже если мы ожидаем, что вызов b
вызовет ошибку во второй раз, мы увидимчто b
сейчас, фактически, nil
.
Почему это так?Почему b
получает назначение nil
?Поскольку ||
никогда не достигал назначения, я ожидал, что b
останется неопределенным.Как это можно определить, но не присвоить значение?