为什么可以这样做我不希望是这样。

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]}}

更新
我找到了一个解决方案,感谢答案:http://blog.flavorjon.es/2008/08/freezing-deep-ruby-data-structures.html

最佳答案

只有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

关于ruby - 为什么可以更改卡住常数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25285072/

10-12 05:17