我知道Fixnum
类继承自Integer
类。但它们之间的实际差异是什么?是否有任何用例我们有时会使用Fixnum
,有时会使用Integer
?
答案 0 :(得分:65)
更新:从Ruby 2.4开始,Fixnum
和Bignum
类消失了,只有Integer
。完全相同的优化仍然存在,但它们被视为"正确的"编译器优化,即在幕后,对程序员来说是不可见的。
这有点令人困惑。 Integer
是您应该考虑的真正的类。 Fixnum
基本上是一种性能优化,首先应该永远不会让程序员看到它。 (将其与YARV中的flonums进行比较,它们完全作为VM内部的优化实现,并且从未向程序员公开。)
基本上,Fixnum
是快速的,Bignum
是慢的(呃),实现会自动在它们之间来回切换。你永远不会直接要求其中一个,你只会得到一个或另一个,这取决于你的整数是否符合Fixnum
的限制大小。
答案 1 :(得分:38)
你永远不会“使用”Integer
。它是一个抽象类,其工作是赋予其子项(Fixnum
和Bignum
)方法。实际上,在任何情况下你都不会要求一个对象的类,并被告知它是一个Integer
。