Я знаю, что класс Fixnum
наследуется от класса Integer
. Но какова фактическая разница между ними? Существуют ли какие-либо варианты использования, когда мы иногда используем Fixnum
, а иногда используем Integer
вместо?
В чем разница между Integer и Fixnum?
Ответ 1
Вы никогда не "используете" Integer
. Это абстрактный класс, задачей которого является предоставить своим детям (Fixnum
и Bignum
) методы. Ни при каких обстоятельствах вы никогда не попросите класс объекта и не скажете, что это Integer
.
Ответ 2
ОБНОВЛЕНИЕ: с Ruby 2.4 классы Fixnum
и Bignum
исчезли, есть только Integer
. Точные же оптимизации все еще существуют, но они рассматриваются как "правильные" оптимизаторы компилятора, т.е. За кулисами, невидимые для программиста.
Это несколько сбивает с толку. Integer
- это настоящий класс, о котором вы должны думать. Fixnum
- это в основном оптимизация производительности, которая никогда не должна была быть видна программисту в первую очередь. (Сравните это с flonums в YARV, которые реализованы полностью как оптимизация внутри VM и никогда не подвергаются программисту.)
В основном, Fixnum
быстрые и Bignum
являются медленными (er), и реализация автоматически переключается между ними. Вы никогда не запрашиваете одного из них напрямую, вы просто получите тот или иной, в зависимости от того, подходит ли ваше целое к ограниченному размеру Fixnum
или нет.