【发布时间】:2014-01-27 03:40:29
【问题描述】:
我知道Fixnum 类继承自Integer 类。但是它们之间的实际区别是什么?是否存在我们有时使用Fixnum,有时使用Integer 的用例?
【问题讨论】:
标签: ruby
我知道Fixnum 类继承自Integer 类。但是它们之间的实际区别是什么?是否存在我们有时使用Fixnum,有时使用Integer 的用例?
【问题讨论】:
标签: ruby
更新:从 Ruby 2.4 开始,Fixnum 和 Bignum 类已经消失,只有 Integer。完全相同的优化仍然存在,但它们被视为“适当的”编译器优化,即在幕后,程序员不可见。
这有点令人困惑。 Integer 是您应该考虑的 real 类。 Fixnum 基本上是一种性能优化,一开始就不应该让程序员看到。 (将此与 YARV 中的 flonum 进行比较,后者完全作为 VM 内部的优化实现,从未暴露给程序员。)
基本上,Fixnums 很快,Bignums 很慢(呃),实现会自动在它们之间来回切换。您永远不会直接要求其中之一,您只会得到其中之一,具体取决于您的整数是否适合 Fixnum 的限制大小。
【讨论】:
3.to_roman的东西,你应该扩展Integer而不是Fixnum对吧?
to_roman 对Fixnum 和Bignum 都可用。如果这是你的目标,那么是的。
你永远不会“使用”Integer。它是一个抽象类,其工作是赋予其子级(Fixnum 和Bignum)方法。实际上,在任何情况下,您都不会询问对象的类并被告知它是Integer。
【讨论】:
Integer。它是一个抽象类,它的工作是赋予它的孩子(Fixnum 和Bignum)方法”,是吗?等同于:Integer 是一个抽象类,它为其子类Fixnum 和Bignum 定义了接口,而您从不使用抽象类进行实例化?