我知道Fixnum类继承自Integer类。但它们之间的实际区别是什么?有没有我们有时使用Fixnum,有时使用Integer的用例?
发布于 2014-01-27 11:47:08
您永远不会“使用”Integer。它是一个抽象类,其工作是为其子类(Fixnum和Bignum)赋予方法。实际上,在任何情况下,您都不会在请求对象的类时被告知它是一个Integer。
发布于 2014-01-29 00:28:19
更新:从Ruby2.4开始,Fixnum和Bignum类都消失了,只剩下Integer。完全相同的优化仍然存在,但它们被视为“适当的”编译器优化,即在幕后,程序员看不见。
这有点令人困惑。Integer是你应该考虑的真正的类。Fixnum基本上是一种性能优化,从一开始就不应该让程序员看到。(这与YARV中的flonum相比,后者完全作为VM中的优化实现,从不向程序员公开。)
基本上,Fixnum是快的,而Bignum是慢的(Er),并且实现会自动在它们之间来回切换。你永远不会直接要求其中的一个,你只会得到一个或另一个,这取决于你的整数是否适合Fixnum的限制大小。
https://stackoverflow.com/questions/21372649
复制相似问题