4
值限制錯誤:序號<obj>的F#值限制,但不是列表<obj>?
let myFn (s : string) (args : obj seq) =()
let myOtherFn = myFn ""
無值限制錯誤:
let myFn (s : string) (args : obj list) =()
let myOtherFn = myFn ""
爲什麼?
值限制錯誤:序號<obj>的F#值限制,但不是列表<obj>?
let myFn (s : string) (args : obj seq) =()
let myOtherFn = myFn ""
無值限制錯誤:
let myFn (s : string) (args : obj list) =()
let myOtherFn = myFn ""
爲什麼?
所有綁定是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
這是原因,但相關的差異不是以次是一個接口,而該名單是密封的。例如使用'obj ResizeArray'代替列表,並且它也會給出值限制錯誤。 – Vandroiy
感謝您的糾正,您絕對正確。 –