Integer和Fixnum有什么区别?
我知道Fixnum
类inheritance自Integer
类。 但是他们之间的实际区别是什么呢? 有没有我们有时使用Fixnum
用例,有时用Integer
来代替?
你永远不会“使用” Integer
。 这是一个抽象的类,其工作是赋予其子女( Fixnum
和Bignum
)方法。 在任何情况下,你都不会要求一个对象的类,并被告知它是一个Integer
。
更新 :从Ruby 2.4起, Fixnum
和Bignum
类不见了,只有Integer
。 仍然存在完全相同的优化,但是它们被视为“适当的”编译器优化,即在幕后,程序员不可见。
这有点令人困惑。 Integer
是你应该考虑的真正的类。 Fixnum
基本上是一个性能优化,首先应该永远不会让程序员看到它。 (把这个和YARV中的flonums比较一下,这个在VM里面完全是作为一个优化来实现的,而且不会被程序员看到)。
基本上, Fixnum
是快速的, Bignum
是慢的(呃),实现自动在它们之间来回切换。 你从不直接要求其中的一个,你只需要一个或另一个,取决于你的整数是否适合Fixnum
的受限制的大小。