2010-07-01 25 views
6

Soy bastante nuevo en F # y se acercó a través de este escenario y estaba esperando que alguien podría explicar por qué mi compilador no le gusta el código ...F # tubería hacia adelante para convertir de int a bigint

Si en Fa # hago lo siguiente ...

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

todo está bien y el número se convierte en el tipo de datos relevantes ...

Sin embargo, si hago lo siguiente ...

let IntToBigInt = 10 |> bigint 

Aparece un error "Uso no válido del nombre de tipo o del constructor del objeto". Supongo que esto se debe a que no hay una sobrecarga del operador para el tubo de avance para bigint?

Si quisiera hacer este código posible, ¿cómo lo haría? Sé que podría utilizar una sintaxis diferente, como ...

let IntToBigInt = bigint(10) 

pero me gusta mucho la sintaxis Adelante tuberías y me gustaría saber si puedo lograrlo de modo que ...

let IntToBigInt = 10 |> bigint 

funcionaría ...

Respuesta

14

No tiene nada que ver con las sobrecargas. 10.0 |> int funciona porque hay una función llamada int. Sin embargo, no hay una función llamada bigint, por lo que 10 |> bigint no funciona.

Si define una, funciona:

> 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

Para añadir a Sepp de la 'bigint' Marcos utilizaba antes es un constructor de tipos, no una función. – Mau

+0

Gracias sepp ... ¡Nunca me di cuenta de eso! Tiene perfecto sentido ahora ... –

+6

si REALMENTE desea utilizar la canalización, entonces ... let y = 1 |> bigint.op_Impllicit – desco