我正在学习 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