序列的 F# 值限制,<obj>但不是列表<obj>?



值限制错误:

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

无值限制错误:

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

为什么?

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

由于seq<'T>是一个接口(IEnumable的别名),因此推断出的myOtherFn的类型为
val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
它是泛型的,但是myOtherFn不是函数声明(请阅读上面链接中的ValueRestriction部分),因此自动泛化无法推断出这与val myOtherFn : seq<obj> -> unit相同。

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

相关内容

  • 没有找到相关文章

最新更新