我对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
会工作......
答案 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