Я изучаю Ruby, и я просто нашел интересное поведение при использовании метода Object#freeze
с переменными.
После того, как я заморожу переменную (либо Fixnum
или Array
), я все еще могу ее изменить! Это странно, поскольку, насколько мне известно, это не должно происходить, и TypeError
должен быть поднят.
Здесь мой код:
test = 666
var = 90
#ok
var += 5
puts "var.frozen? #{var.frozen?}"
var.freeze
puts "var.frozen? #{var.frozen?}"
var = test
puts "var = #{var}"
То же самое для массива:
test = [666]
var = [90]
#ok
var += [5]
puts "var.frozen? #{var.frozen?}"
var.freeze
puts "var.frozen? #{var.frozen?}"
var = test
puts "var = #{var}"
Но когда я пытаюсь вытолкнуть что-то в массив после замораживания, он поднимает аранжировку, как и ожидалось:
test = [666]
var = [90]
#ok
var += [5]
puts "var.frozen? #{var.frozen?}"
var.freeze
puts "var.frozen? #{var.frozen?}"
var << test
puts "var = #{var}"
Может кто-нибудь объяснить мне эту проблему? Кажется странным.
Изменить Я использую Windows XP + Ruby 1.9.3-p429