我想知道Fixnum和Bignum的范围。
在Float中,我可以使用Float::MAX和Float::MIN获得Float的范围。
Fixnum和Bignum中没有类似的常数。
实现此目标的最佳方法是什么?

最佳答案

忘记 Fixnum Bignum 。它们是内部私有(private)实现细节。它们是优化。您应该忽略它们。您唯一需要关注的类是 Integer

ISO Ruby Language Specification仅指定Integer类。它允许实现特定的子类,但未指定它们。
Fixnum是一种优化,应该在实现内部进行,并且永远都不要暴露给程序员。考虑一下YARV中的碎屑。您甚至注意到flonums were introduced in YARV 2.0吗?他们所做的只是使 Float 更快。但是你永远也看不到他们。应该是这样。

实际上是YARV 2.4 removes Fixnum and Bignum and will only have Integer s in the future。出于向后兼容的原因,FixnumBignum将作为Integer的别名保留一段时间,但是类本身将消失。

在Ruby中,Integer没有最大值或最小值;它们是任意大小的整数。因此,没有任何这样的常数。
Fixnum的大小限制(如果根本存在)取决于平台和实现。在JRuby上,Fixnum始终为64位,在YARV上,它们在64位平台上为63位,在32位平台上为31位。在Opal上,Integers实现为ECMAScript Numbers(实际上是IEEE754浮点数,因此仅适用于53位)和I don't think they even have Fixnum s or Bignum s

关于ruby - Ruby中Fixnum和Bignum的最大值和最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40034576/

10-13 02:10