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

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

2 ответа

Решение

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

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


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

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

Другие вопросы по тегам