2

なぜ 2 行目で柔軟な型が制約されていることがわかるのだろうか。明らかにそれを回避することができますが、これから学ぶべき教訓はありますか?

type DataTable with
    static member FromObjArray     (input : seq<#seq<'T>>) =  ()  //keep the flexibility
    static member FromObjArray<'T> (input : seq<#seq<'T>>) =  ()  //constrained to seq
4

1 に答える 1

3

2 番目のケースでは、型パラメーターが1 つだけのジェネリック メソッドとしてメソッドを明示的に宣言したため、柔軟な型が制約されていると思います'T。柔軟な型は別の型パラメーターに脱糖され、パラメーターを明示的にすると、コンパイラーはその (非表示の) 型パラメーターを追加できません。

最初の宣言は、次のようなものに対応します。

static member FromObjArray<'T, 'S when 'S :> seq<'T>> (input : seq<'S>) =  ()

メソッドが型パラメーターのみを受け取ると明示的に言うと、コンパイラーはこのようなメソッドを生成できません (シーケンスから派生した型'Tを追加する必要があるため)。'S

于 2013-03-01T12:23:47.743 に答える