В 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]
Я понимаю полезность замораживания строк, массивов или других изменяемых типов данных. Однако, насколько я знаю, экземпляры Fixnum
, Symbol
и Float
являются неизменными с самого начала. Есть ли какая-либо причина, чтобы заморозить их (или любая причина, по которой Руби не сообщит о них как о frozen?
Обратите внимание, что в Ruby 2.0 Fixnum
s и Float
s оба начинаются как замороженные, тогда как Symbol
s сохраняют поведение, описанное выше. Итак, постепенно становится «лучше»:)