F#forward管道从int转换为bigint

时间:2010-07-01 14:08:15

标签: f#

我对F#相当陌生并遇到了这种情况并且希望有人可以解释为什么我的编译器不喜欢代码......

如果在F#中我执行以下操作......

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

一切都很好,数字会转换为相关的数据类型......

但是如果我做以下事情......

let IntToBigInt = 10 |> bigint

我收到错误“类型名称或对象构造函数的使用无效”。 我假设这是因为bigint的前向管道没有运算符重载?

如果我想让这段代码成为可能,我该怎么做?我知道我可以使用不同的语法,如...

let IntToBigInt = bigint(10)

但我真的很喜欢Forward Pipe语法,想知道我是否可以实现它......

let IntToBigInt = 10 |> bigint

会工作......

1 个答案:

答案 0 :(得分:14)

它与重载无关。 10.0 |> int有效,因为有一个名为int的函数。但是没有名为bigint的函数,因此10 |> bigint不起作用。

如果你定义一个,它可以工作:

> 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