值限制错误:
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/