4

値制限エラー:

let myFn (s : string) (args : obj seq) = ()
let myOtherFn = myFn ""

値制限なしエラー:

let myFn (s : string) (args : obj list) = ()
let myOtherFn = myFn ""

なんで?

4

1 に答える 1

4

すべてのバインディングは自動汎化の対象です。

seq<'T>はインターフェイス (IEnumrable のエイリアス) であるため、推論される型はmyOtherFnジェネリック
val myOtherFn : ('_a -> unit) when '_a :> seq<obj>
ですが、 myOtherFn は関数宣言ではありません (上記のリンクの値制限の部分を参照)。そのため、自動一般化ではこれが同じであると推測できません。としてval myOtherFn : seq<obj> -> unit

自動一般化を強制するには、明示的なパラメーターを myOtherFn に追加します。
let myOtherFn args = myFn "" args

于 2016-01-12T00:39:40.137 に答える