价值限制错误:
let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""
没有价值限制错误:
let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""
为什么?
答案 0 :(得分:4)
所有绑定都是automatic generalization的主题。
由于seq<'T>
是一个接口(IEnumrable的别名),myOtherFn
的推断类型将是
val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
这是通用的,但是,myOtherFn不是函数声明(在上面的链接中读取值限制部分),因此自动泛化不能推断出它与val myOtherFn : seq<obj> -> unit
相同。
要强制自动泛化,您可以向myOtherFn添加显式参数
let myOtherFn args = myFn "" args