2014-02-11 29 views
3

我想知道爲什麼Ruby將它命名爲Fixnum;其他語言將其命名爲Integer,Int,Number等。我看到Fixnum < IntegerBignum < IntegerInteger < NumericFloat < Numeric。我想這是因爲大小:爲什麼在Ruby中名爲Fixnum的整數?

1.class => Fixnum 
(10**100).class => Bignum 

而且從the doc

保存可在本機字(減1位)表示整數值。如果Fixnum上的任何操作超過此範圍,該值將自動轉換爲Bignum

爲什麼名稱爲Fixnum?我想過固定號碼,但它不是固定的,也不是固定號碼。

+3

這個問題似乎是題外話,因爲它是關於設計的理由的語言。 – ApproachingDarknessFish

+1

應該將哪個堆棧交換移至? – Dorian

回答

7

這不是紅寶石想出了 - 術語「Fixnum對象」來自Lisp的。就像在Ruby中一樣,Lisp中的fixnum是一個可以用機器整數表示的數字。雖然我從來沒有見過一個主要來源來證明我是對的,但我始終認爲名稱的「修復」部分提到這樣一個事實,即它只能代表一個固定範圍的數字,而與無限的貝因姆(以犧牲更糟的性能爲代價來獲得其限制)。

+1

我相信'Fix'實際上是指'Fixnum'是不可變的。每個整數值只有一個「Fixnum」實例,因此引用是「固定的」。 –

+1

@ Alex.Bullard:不過,我不相信這些數字或其他類型的數字通常都是可變的。原來可變的東西是什麼? – Chuck

+1

@ Alex.Bullard數字是否是不可變的是Ruby特定的。如果這個詞確實來自Lisp,那麼這不能成爲術語「修復」的原因。 – sawa

2

整數有2種兒童:

那些可以在本機機器字來表示(減1位): Fixnums。 (查看object_id小整數,注意 模式?嘗試一些其他的對象,字符串,數組,等等。這是 ,其中負1位來自)。

而那些過大:大數(對於這些的object_id是剛剛 像其他非Fixnums。)

p 1.is_a?(Integer) #=> true 
p (10**100).is_a?(Integer) #=> true 
相關問題