Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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


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

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