[英]F# value restriction for seq<obj> but not list<obj>?
價值限制錯誤:
let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""
沒有價值限制錯誤:
let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""
為什么?
所有綁定都是自動泛化的主題。
由於seq<'T>
是一個接口(用於IEnumrable的別名),推斷出的類型為myOtherFn
將是
val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
這是通用的,但是,myOtherFn不是函數聲明(在上面的鏈接中讀取值限制部分),因此自動泛化不能推斷出這與val myOtherFn : seq<obj> -> unit
。
要強制自動泛化,可以向myOtherFn添加顯式參數
let myOtherFn args = myFn "" args
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.