簡體   English   中英

seq的F#值限制 <obj> 但不是清單 <obj> ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM