В чем смысл или эффект замораживания символов и чисел в Ruby?

В Ruby 1.9 вы можете иметь Fixnum , Float и Значения символа , которые разморожены или заморожены:

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 неизменны с самого начала. Есть ли какая-либо причина для их замораживания (или какая-либо причина, по которой Ruby не сообщает, что они уже заморожены?

Обратите внимание, что в Ruby 2.0 Fixnum s и Float s оба начинаются как замороженные, в то время как символы сохраняют поведение, описанное выше. Итак, ситуация постепенно "улучшается": )

17
задан Phrogz 18 May 2013 в 13:29
поделиться