我想知道Fixnum和Bignum的范围。 在Float中,我可以使用Float :: MAX和Float :: MIN获得Float的范围。 Fixnum和Bignum中没有类似的常量。 实现这一目标的最佳方法是什么?
答案 0 :(得分:6)
忘记Fixnum
和Bignum
。它们是私有的内部实现细节。他们是优化。你应该忽略它们。您应该关注的唯一课程是Integer
。
ISO Ruby Language Specification仅指定Integer
类。它允许特定于实现的子类,但它没有指定它们。
Fixnum
是一个优化,应该是实现的内部优化,永远不应该暴露给程序员。想想YARV中的 flonum 。你有没有注意到flonums were introduced in YARV 2.0?他们所做的只是让Float
更快。但你永远不会看到他们。这是应该的。
事实上,YARV 2.4 removes Fixnum
and Bignum
and will only have Integer
s in the future。由于向后兼容的原因,Fixnum
和Bignum
将作为Integer
的别名保留一段时间,但类本身将会消失。
在Ruby中,Integer
没有最大值或最小值;它们是任意大小的整数。因此,没有任何这样的常数。
Fixnum
的大小限制(如果存在的话)取决于平台和实现。在JRuby上,Fixnum
总是64位,在YARV上,它们在64位平台上是63位,在32位平台上是31位。在蛋白石上,Integer
被实现为ECMAScript Number
s(实际上是IEEE754浮点数,因此仅对53位精确)和I don't think they even have Fixnum
s or Bignum
s。