Integer和Fixnum有什么区别?

我知道Fixnum类inheritance自Integer类。 但是他们之间的实际区别是什么呢? 有没有我们有时使用Fixnum用例,有时用Integer来代替?

你永远不会“使用” Integer 。 这是一个抽象的类,其工作是赋予其子女( FixnumBignum )方法。 在任何情况下,你都不会要求一个对象的类,并被告知它是一个Integer

更新 :从Ruby 2.4起, FixnumBignum类不见了,只有Integer 。 仍然存在完全相同的优化,但是它们被视为“适当的”编译器优化,即在幕后,程序员不可见。


这有点令人困惑。 Integer是你应该考虑的真正的类。 Fixnum基本上是一个性能优化,首先应该永远不会让程序员看到它。 (把这个和YARV中的flonums比较一下,这个在VM里面完全是作为一个优化来实现的,而且不会被程序员看到)。

基本上, Fixnum是快速的, Bignum是慢的(呃),实现自动在它们之间来回切换。 你从不直接要求其中的一个,你只需要一个或另一个,取决于你的整数是否适合Fixnum的受限制的大小。