我想知道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。出于向后兼容的原因,Fixnum
和Bignum
将作为Integer
的别名保留一段时间,但是类本身将消失。
在Ruby中,Integer
没有最大值或最小值;它们是任意大小的整数。因此,没有任何这样的常数。Fixnum
的大小限制(如果根本存在)取决于平台和实现。在JRuby上,Fixnum
始终为64位,在YARV上,它们在64位平台上为63位,在32位平台上为31位。在Opal上,Integer
s实现为ECMAScript Number
s(实际上是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/