В чем разница между Integer и Fixnum?


Я знаю, что Fixnum класс наследует от Integer класса. А в чем собственно разница между ними? Есть ли случаи использования, когда мы иногда используем Fixnum, а иногда и использовать Integer вместо?

2 56

2 ответа:

вы никогда не "использовать" Integer. Это абстрактный класс, чья работа заключается в наделении своих детей (Fixnum и Bignum) С методами. Фактически ни при каких обстоятельствах вы никогда не попросите класс объекта и не скажете, что это Integer.

обновление: начиная с Ruby 2.4,Fixnum и Bignum классы ушли, осталось только Integer. Точно такие же оптимизации все еще существуют, но они рассматриваются как "правильные" оптимизации компилятора, т. е. за кулисами, невидимые для программиста.


это несколько сбивает с толку. Integer - это реальные класс, о котором вы должны думать. Fixnum Это в основном оптимизация производительности, которая никогда не должна была быть видимой для программист в первую очередь. (Сравните это с flonums в YARV, которые полностью реализованы как оптимизация внутри виртуальной машины и никогда не подвергаются программисту.)

по сути, Fixnum s быстро и Bignums являются медленными (er), и реализация автоматически переключается между ними. Вы никогда не просите один из них напрямую, вы просто получите один или другой, в зависимости от того, соответствует ли ваше целое число ограниченному размеру a Fixnum или нет.