我知道Fixnum
类继承Integer
类。但是它们之间的实际区别是什么?有没有我们有时使用Fixnum
的用例,有时用Integer
代替?Integer和Fixnum有什么区别?
回答
你从不“使用”Integer
。这是一个抽象类,其工作是赋予子女(Fixnum
和Bignum
)方法。实际上,在任何情况下,你都不会要求一个对象的课程,并被告知它是一个Integer
。
UPDATE:随着Ruby 2.4的Fixnum
和Bignum
类都不见了,只有Integer
。仍然存在完全相同的优化,但它们被视为“正确的”编译器优化,即在幕后,程序员不可见。
这有点令人困惑。 Integer
是你应该考虑的类real。 Fixnum
基本上是一个性能优化,首先应该永远不会让程序员看到它。 (在YARV flonums,这是完全实现为VM内的优化,绝不会暴露给程序员比较一下。)
基本上Fixnum
s为快速Bignum
s为慢(ER),并实施自动在它们之间来回切换。你从不直接要求其中一个,你只需要获得一个或另一个,具体取决于你的整数是否适合Fixnum
的受限制的大小。
所以如果你想实现像'3.to_roman'这样的东西,你应该扩展'Integer'而不是'Fixnum'吧? – Dennis
这样做会使'to_roman'对'Fixnum'和'Bignum'都可用。如果这是你的目标,那么是的。 –
- 1. ArrayList <Integer> a [];有什么区别?和ArrayList <Integer> a ;?
- 2. order_by fixNum,integer ... mongoid
- 3. 这个脚本中int和Integer有什么区别?
- 4. 有什么区别`和$(Bash中有什么区别?
- 5. 有什么区别? :和||
- 6. &&和||有什么区别?
- 7. “/”和“/ *”有什么区别?
- 8. 有什么区别:。!和:r!?
- 9. ==和===有什么区别?
- 10. Appender和〜有什么区别?
- 11. $ @和$ *有什么区别?
- 12. is和=有什么区别?
- 13. #.00和#。##有什么区别?
- 14. `==`和`is`有什么区别?
- 15. '=='和'==='有什么区别?
- 16. /和/#/有什么区别?
- 17. | 0和~~有什么区别?
- 18. `&`和`ref`有什么区别?
- 19. ==和===有什么区别?
- 20. ==和===有什么区别?
- 21. `{}`和`[]`有什么区别?
- 22. JavaScript和=== ===有什么区别?
- 23. difftime和' - '有什么区别?
- 24. =和==有什么区别?
- 25. xtype和别名有什么区别?
- 26. Mixpanel:识别()和people.identify()有什么区别?
- 27. Ruby Integer和Fixnum未解决的行为
- 28. Ruby中`Fixnum`和`3`有什么不同?
- 29. 有什么区别
- 30. 有什么区别
此答案对Ruby 2.3及更早版本是正确的。从Ruby 2.4开始是错误的。查看其他[回答](https://stackoverflow.com/questions/21372649/what-is-the-difference-between-integer-and-fixnum/21411269#21411269)。 –
@EricDuminil非常好,谢谢你的好评。 – matt