Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么可以更改冻结常数?_Ruby - Fatal编程技术网

Ruby 为什么可以更改冻结常数?

Ruby 为什么可以更改冻结常数?,ruby,Ruby,为什么可以执行以下操作?我没想到会是这样 CAD={:hey => {a: [1], b: [2]}}.freeze CAD.frozen? #=> true p=CAD[:hey][:a] #=> [1] p << nil #=> [1, nil] CAD #=> {:hey=>{:a=>[1, nil], :b=>[2]}} CAD={:hey=>{a:[1],b:[2]}。冻结

为什么可以执行以下操作?我没想到会是这样

CAD={:hey => {a: [1], b: [2]}}.freeze
CAD.frozen?     #=> true 
p=CAD[:hey][:a] #=> [1] 
p << nil        #=> [1, nil] 
CAD             #=> {:hey=>{:a=>[1, nil], :b=>[2]}}
CAD={:hey=>{a:[1],b:[2]}。冻结
CAD.freezed?#=>真的
p=CAD[:嘿][:a]#=>[1]
p[1,无]
CAD#=>{:hey=>{:a=>[1,nil],:b=>[2]}
更新


多亏了这个答案,我找到了一个解决方案:

只有由CAD表示的哈希对象被冻结,而不是哈希上引用的其他对象,如
CAD[:hey][:a]

> CAD={:hey => {a: [1], b: [2]}}.freeze
=> {:hey=>{:a=>[1], :b=>[2]}}
> CAD.frozen?
=> true
> CAD[:hey].frozen?
=> false
> CAD[:hey][:a].frozen?
=> false

只有由CAD表示的散列对象被冻结,但散列上引用的其他对象(如
CAD[:hey][:a]
)不被冻结

> CAD={:hey => {a: [1], b: [2]}}.freeze
=> {:hey=>{:a=>[1], :b=>[2]}}
> CAD.frozen?
=> true
> CAD[:hey].frozen?
=> false
> CAD[:hey][:a].frozen?
=> false