为什么F#不能推断出这个语句的类型?

时间:2009-05-11 03:34:25

标签: f# functional-programming type-inference

/// I can't do this
let max =  float n |> sqrt |> int64 |> Math.BigInt

/// But this is allowed
let max =  Math.BigInt(float n |> sqrt |> int64)

2 个答案:

答案 0 :(得分:3)

不带参数的类构造函数不能使用。你可以写

let max =  float n |> sqrt |> int64 |> (fun x -> Math.BigInt(x))
如果你愿意,可以。 (不过,我不知道这种限制的原因。)

答案 1 :(得分:0)

在我的F#版本(Mono上的1.9.4.19)中,两个版本都失败了:

  

The member or object constructor 'BigInt' takes 0 argument(s) but is here given 1. The required signature is 'Math.BigInt()'.

我可以用

let max =  float n |> sqrt |> int64 |> Math.BigInt.of_int64

获取bigint

let max =  float n |> sqrt |> int64 |> Math.BigInt.FromInt64

获得Math.BigInt