2015-09-15 128 views
-3

如果我做了2.size,为什么我会得到8作为输出?它不应该抛出一个错误?`size`返回奇怪值

2.length引发错误

NoMethodError: undefined method `count' for 2:Fixnum

2.count

NoMethodError: undefined method `count' for 2:Fixnum

2.size计数位?

0xFFF0000.size也返回8

11111111111111111111.size8,而1111111111111111111111111111111111111111111111111111111111111111111111111111.size32

也许它是计数位毕竟。

+1

1111111111111111111111111111111111111111111111111111111111111111111111111111是比可装配到32位(4294967295无符号)显著大。 –

+3

很明显,首先要阅读[Fixnum#size](http://ruby-doc.org//core-2.2.0/Fixnum.html#method-i-size)的文档。这似乎很清楚。你不明白什么? –

+0

RTFM。 ........... – sawa

回答

3

它只是returns the number of bytes used for the internal representation of the number

如果数字过大,Ruby会自动创建Bignums而不是Fixnum

foo = 1111111111111111111 
bar = 11111111111111111111 
baz = 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 
foo.class # => Fixnum 
foo.size # => 8 
bar.class # => Bignum 
bar.size # => 8 
baz.class # => Bignum 
baz.size # => 63