在Ruby 1.9中,您可以拥有Fixnum,Float以及Symbol未解冻或冻结的值:
irb(main):001:0> a = [ 17, 42.0, :foo ]; a.map(&:frozen?)
=> [false, false, false]
irb(main):002:0> a.each(&:freeze); a.map(&:frozen?)
=> [true, true, true]
Run Code Online (Sandbox Code Playgroud)
我理解冻结字符串,数组或其他可变数据类型的实用程序.据我所知,然而Fixnum,Symbol和Float实例是从一开始就一成不变的.是否有任何理由冻结它们(或者Ruby不会报告它们的任何原因)frozen?
请注意,在Ruby 2.0 Fixnum和Floats中,两者都以冻结开始,而Symbols保留上述行为.所以,它慢慢变得'更好':)
Ale*_*lex 17
答案是不.这些数据类型是不可变的.没有理由冻结这些数据类型.Ruby不会将这些数据类型报告为冻结的原因是因为该obj.frozen?方法返回对象的冻结状态,并且false最初设置为不可变数据类型.调用obj.freeze将为该对象设置freeze状态true.
底线是调用freeze不可变数据类型将freezeobj 的状态设置为true,但不执行任何操作,因为该对象已经是不可变的.
| 归档时间: |
|
| 查看次数: |
3976 次 |
| 最近记录: |