2015-09-15 165 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