它们似乎相同,但在比较它们时,它是错误的:
5.is_a? Fixnum
# => true
5.is_a? Numeric
# => true
Numeric == Fixnum
# => false
答案 0 :(得分:5)
<强> NUMERIC 强>
Numeric是所有更高级别的数字类应继承的类。
Numeric允许实例化堆分配的对象。其他核心数字类(如Integer)实现为immediates,这意味着每个Integer都是一个永远按值传递的单个不可变对象。
<强> Fixnum对象强>
Fixnum保存可以在本机机器字(减1位)中表示的整数值。如果Fixnum上的任何操作超出此范围,则该值将自动转换为Bignum。
Fixnum对象具有直接价值。这意味着当它们作为参数分配或传递时,将传递实际对象,而不是对该对象的引用。
注意:每个Fixnum都是数字,但每个数字都不是Fixnum。
答案 1 :(得分:3)
Numeric == Fixnum
会返回false
,因为它们是不同的类。
is_a?
不检查对象所属的特定类,即instance_of?
。这是is_a?
的文档:
如果class是obj的类,或者如果class是obj中包含的obj或模块的超类之一,则返回true。
正如其他答案所述,Fixnum
是Numeric
的子类,这就是为什么5.is_a? Fixnum
和5.is_a? Numeric
都返回true
。
答案 2 :(得分:1)
is_a?
与instance_of?
不同,与kind_of?
相同。因此,前两行并未显示Fixnum
和Numeric
相同。第三行表明它们是不同的。实际上,Fixnum
是Numeric
的子类。