2010-07-01 29 views
6

bigint için int dönüştürmek için ben F # için oldukça yeni ve bu senaryo karşısında geldi ve kodu gibi benim derleyici sessizdi ... F # ileri boru

F # ben yaparsanız neden birinin açıklayabilir umuyordum ... aşağıdaki

let FloatToInt = 10.0 |> int 
let IntToFloat = 10 |> float 

Her şey gayet iyi ve sayı ilgili veri türü artığını ... Ben aşağıdakileri yapın ancak eğer

...

let IntToBigInt = 10 |> bigint 

"Tür adı veya nesne yapıcısı geçersiz kullanımı" hatası alıyorum. Bunun, bigint için ileri boru için bir operatör aşırı yüklenmesi olmadığı için var mıdır?

Bu kodu mümkün kılmak istesem nasıl yapardım? Ben o yüzden bunu başarmak eğer

let IntToBigInt = bigint(10) 

Ama gerçekten İleri Boru sözdizimi gibi ve istediğiniz bilmek ... Ben gibi farklı sözdizimi kullanabilirsiniz biliyorum ...

let IntToBigInt = 10 |> bigint 

çalışacak ...

cevap

14

Aşırı yüklenmelerle ilgisi yoktur. 10.0 |> int, int adlı bir işlev olduğu için çalışır. Ancak bigint adlı bir işlev yoktur, bu nedenle 10 |> bigint çalışmaz. Eğer birini tanımlarsanız

, çalışır:

> let bigint (x:int) = bigint(x);; // looks recursive, but isn't 
val bigint : int -> System.Numerics.BigInteger 

> 42 |> bigint;; 
val it : System.Numerics.BigInteger = 42I 
+3

, Sepp en etmek 'Mark tip yapıcısı önce kullanıyorsa edildi bigint' değil, bir işlev eklemek için. – Mau

+0

Teşekkürler sepp ... Bunu hiç fark etmedim! Şimdi gerçekten mantıklı ... –

+6

Eğer gerçekten boruhattı kullanmak istiyorsan o zaman ... let y = 1 |> bigint.op_Implicit – desco