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