ruby Fixnum 类的大小函数

Viv*_*mar 2 ruby internals

为什么 ruby​​ size 函数返回这样的数字输出?

1000000.size              # => 8
99999999999999999999.size # => 9
Run Code Online (Sandbox Code Playgroud)

ndn*_*kov 5

Ruby 内部使用两种不同的结构来存储整数 -FixnumBignum。第一个用于较小的数字,并直接映射到主机架构上的长整数。它速度更快,大小恒定,但存储量有限。后者用于存储任意大的数字,其大小取决于数字的大小。

1000000.class              # => Fixnum
99999999999999999999.class # => Bignum
Run Code Online (Sandbox Code Playgroud)

转换是在内部完成的。事实上,在 ruby​​ 2.4.0 中,只有一个类 - Integer.