4

值限制错误:

let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""

无值限制错误:

let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""

为什么?

4

1 回答 1

4

所有绑定都是自动泛化的主题。

由于seq<'T>是一个接口(IEnumrable 的别名),因此推断的类型myOtherFn
val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
是通用的,但是 myOtherFn 不是函数声明(请阅读上面链接中的值限制部分),因此自动泛化不能推断出这是相同的作为val myOtherFn : seq<obj> -> unit.

要强制自动泛化,您可以向 myOtherFn 添加显式参数
let myOtherFn args = myFn "" args

于 2016-01-12T00:39:40.137 回答