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