Они кажутся эквивалентными, но при их сравнении это неверно:
5.is_a? Fixnum
# => true
5.is_a? Numeric
# => true
Numeric == Fixnum
# => false
Они кажутся эквивалентными, но при их сравнении это неверно:
5.is_a? Fixnum
# => true
5.is_a? Numeric
# => true
Numeric == Fixnum
# => false
ЦИФРОВОЙ
Numeric — это класс, от которого должны наследоваться все числовые классы более высокого уровня.
Numeric позволяет создавать экземпляры объектов, размещенных в куче. Другие основные числовые классы, такие как Integer, реализованы как непосредственные объекты, что означает, что каждый Integer представляет собой один неизменяемый объект, который всегда передается по значению.
ФИКС НОМЕР
Fixnum содержит целые значения, которые могут быть представлены в собственном машинном слове (минус 1 бит). Если какая-либо операция над Fixnum превышает этот диапазон, значение автоматически преобразуется в Bignum.
Объекты Fixnum имеют непосредственное значение. Это означает, что когда они назначаются или передаются в качестве параметров, передается фактический объект, а не ссылка на этот объект.
ПРИМЕЧАНИЕ. Каждый Fixnum является числовым, но каждый Numeric не является Fixnum.
ОБНОВЛЕНИЕ: Ruby 2.4 объединяет fixnum и bignum в целое число.
Numeric == Fixnum
возвращает false
, потому что это разные классы.
is_a?
не проверяет конкретный класс объекта, это будет instance_of?
. Это документация для is_a?
:
Возвращает true, если class является классом obj или если class является одним из суперклассов obj или модулей, включенных в obj.
Как упоминалось в другом ответе, Fixnum
является подклассом Numeric
, поэтому 5.is_a? Fixnum
и 5.is_a? Numeric
возвращают true
.
is_a?
не то же самое, что instance_of?
, это то же самое, что kind_of?
. Таким образом, ваши первые две строки не показывают, что Fixnum
и Numeric
одинаковы. Третья строка показывает, что они разные. На самом деле Fixnum
является подклассом Numeric
.
Numeric
— это базовый класс для всех классов чисел, таких какFixnum
,Float
илиRational
. Найдите иерархию числовых классов ruby, чтобы получить обзор. - person sschmeck   schedule 22.02.2016Fixnum < Integer < Numeric < Object
. Вы также можете заключить, что каждое целое число является объектом, но не каждый объект является целым числом — совершенно очевидно, не так ли? - person Stefan   schedule 22.02.2016