Integer和Fixnum有什么区别?

时间:2014-01-27 03:40:29

标签: ruby

我知道Fixnum类继承自Integer类。但它们之间的实际差异是什么?是否有任何用例我们有时会使用Fixnum,有时会使用Integer

2 个答案:

答案 0 :(得分:65)

更新:从Ruby 2.4开始,FixnumBignum类消失了,只有Integer。完全相同的优化仍然存在,但它们被视为"正确的"编译器优化,即在幕后,对程序员来说是不可见的。


这有点令人困惑。 Integer是您应该考虑的真正的类。 Fixnum基本上是一种性能优化,首先应该永远不会让程序员看到它。 (将其与YARV中的flonums进行比较,它们完全作为VM内部的优化实现,并且从未向程序员公开。)

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

答案 1 :(得分:38)

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