я обнаружил неожиданное поведение в объявлении переменной в if
блока:Рубин, понимание локальные переменные области видимости в случае блока
puts "local_variables: #{local_variables}"
puts "defined? my_variable ini: #{defined? my_variable}"
if true
my_variable = 1
puts "local_variables in the 'if' block: #{local_variables}"
end
1.times do
my_variable_2 = 1
puts "local_variables in the 'times' block: #{local_variables}"
puts "defined? my_variable_2 in the 'times' block: #{defined? my_variable_2}"
end
puts "defined? my_variable_2 end: #{defined? my_variable_2}"
puts "defined? my_variable end: #{defined? my_variable}"
puts "my_variable: #{my_variable}"
В результате получается:
local_variables: [:my_variable]
defined? my_variable ini:
local_variables in the 'if' block: [:my_variable]
local_variables in the 'times' block: [:my_variable_2, :my_variable]
defined? my_variable_2 in the 'times' block: local-variable
defined? my_variable_2 end:
defined? my_variable end: local-variable
my_variable: 1
Вопросы:
- переменные, объявленные в
if
, становятся доступными из-за пределовif
блок, это правильно? почему это выглядит интуитивно понятным для меня? - Почему поведение блока
times
отличается от блокаif
?
Я читал this documentation, но я не вижу if
блок.