2013-03-07 20 views
1

從DOC Bignum混亂與一些`Bignum`性質

下面的屬性,我發現:

「雖然Fixnum值是即時的,Bignum對象不是 - 分配和參數傳遞工作,以引用物體,而不是物體本身。「

其實據我所知,我們傳遞 引用的對象,而不是實際的對象。但在這裏,我 不能遵循的味道。

「當涉及Bignum對象的計算返回一個結果,將適合於一個Fixnum,結果被自動地轉換。」

C我發現了一些規則,例如自動轉換。但是,這裏也適用於此處還是其他在這裏專門爲Ruby定義的規則?

「對於bitwise操作和[]的目的,一個Bignum的被就好像它是一個無限長度bitstring用2的補碼錶示處理」。

爲什麼只有Bignum而不是Fixnum或其他?

任何人都可以幫助我理解這個話題的細節與一些微小的代碼示例?

回答

0

Fixnum是已經實例化的不可變對象。你只需要使用它們。根據文檔:

Fixnum對象具有直接價值。這意味着當它們被分配或作爲參數傳遞時,實際的對象被傳遞,而不是對該對象的引用。賦值不會成爲Fixnum對象的別名。對於任何給定的整數值,實際上只有一個Fixnum對象實例,因此,例如,不能將單例方法添加到Fixnum。

另一方面,Bignum是正常的物體。你需要實例化它們,你使用它們的引用等。

這意味着當你做x = 5時,該對象已經創建。您可以檢查基元的object_id,例如false或0,1,2,...有所不同,但總是相同。在該主題

> 1.object_id 
=> 3 
> x = 1 
=> 1 
> x.object_id 
=> 3 

兩個很好的文章:

對於轉換爲Fixnum對象,有當檢測的結果是顯式轉換觸發在Fixnum覆蓋的域中。例如,對於子兩個整數,當returning the value它調用方法bignorm這樣做轉換,如果有必要(見comment above

> a = 10000000000 
=> 10000000000 
> a.class 
=> Bignum 
> b = a/10 
=> 1000000000 
> b.class 
=> Fixnum 

爲了您的最後一個問題,它鏈接到2的補碼錶示。有幾篇文章如the one for Pythonthe wikipedia page about bitwise operation。事實上,對於Fixnum來說,按位操作是由處理器直接操作的,它以相同的方式操作。