2010-11-07 43 views
8

據我所知,bigint不是一個函數,而是一個類型的構造函數。這就是爲什麼這個失敗:F#中的「bigint」究竟是什麼?

// Won't compile 
let foo = 10 |> bigint 

我知道我可以創建一個接受一個整數並返回一個bigint,然後將管道運營商將致力於一個新的功能。

不過,我不明白爲什麼這個工程:

let bar = bigint 10 

如果bigint是一類的構造函數,爲什麼不讓我需要newbigint在什麼地方被定義爲System.Numerics.BigInteger的構造函數的別名?

回答

7

BIGINT是System.Numerics.BigInteger型abberviation所以,當你鍵入

let x = bigint 10 

實際上創建BigInteger的實例。在F#是在構造函數中可選的,基本上它應該用於創建IDisposable類型的實例時使用

+0

謝謝。我不知道'new'是可選的。這裏有一個類型縮寫列表,但省略了'bigint':http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597684。我看到'int64'也是一個類型的縮寫。但是,我相信也有一個函數'int64'。我想知道爲什麼'bigint'是一個類型縮寫,但'int64'是一個函數。 – royco 2010-11-07 20:58:16

+2

我不知道是否有一個原因,而像「int16」這樣的所有其他數字類型都是「類型縮寫」和「功能」,「bigint」只是一個「類型appreviaton」。我可能會推測這是因爲像「int16」這樣的函數首先存在的唯一原因是提供一種方法來顯示沒有「庫」調用並且通常暴露的原始IL整型轉換(例如'conv.i2')通過其他語言的「投射」功能向其他語言的用戶提供。 – Brian 2010-11-07 21:25:44

+0

@布萊恩,有見地。但我會指出'decimal'享有轉換函數形式,只是一個普通的結構......或許'bigint'也值得一個地方:) – 2010-11-08 00:43:00