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