Я изучаю Ruby и набрал фрагмент кода, чтобы поэкспериментировать с переменными в области блока:
x = 10
3.times do |i; x|
x = x + 1
puts("inside block is #{x}")
end
puts("outside block is #{x}")
Я бы ожидал, что блочная переменная x автоматически захватит значение глобальной переменной x, изатем x внутри блока будет каждый раз равным 11, а x вне блока, который должен быть защищен, и остается на 10. Это «экранирующее» действие - это то, что описано во многих учебных пособиях по Ruby, которые можно найти в Интернете.
Новместо этого скрипт завершается ошибкой, сообщая мне, что x равен nil и что у него нет функции +
.Другими словами, переменная блока x не была инициализирована значением.
Код точный , приведенный выше, находится в файле с именем delete_me.rb
и работает с: ruby delete_me.rb
Когда я запускаю скрипт, я получаю следующую ошибку:
delete_me.rb:3:in `block in <main>': undefined method `+' for nil:NilClass (NoMethodError)
from delete_me.rb:2:in `times'
from delete_me.rb:2:in `<main>'
Как мне инициализировать значение переменной блока в Ruby?