值限制错误:

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

无值限制错误:
let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""

为什么?

最佳答案

所有绑定(bind)都是 automatic generalization 的主题。

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

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

关于seq<obj> 但不是 list<obj> 的 F# 值限制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34733164/

10-14 07:38