灵活的类型和通用参数

时间:2013-03-01 10:39:20

标签: f# flexible-type

我想知道为什么第二行告诉我灵活类型受到限制。 显然,人们可以解决这个问题,但是从中可以获得一些教训吗?

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

1 个答案:

答案 0 :(得分:3)

我认为灵活类型在第二种情况下受到限制,因为您只使用一个类型参数'T将该方法显式声明为泛型方法。如果您将参数设置为显式,则灵活类型将被移植到另一个类型参数,并且编译器无法添加该(隐藏)类型参数。

第一个声明对应于这样的内容:

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

如果你明确说这个方法只接受类型参数'T,那么编译器就不能生成这样的方法(因为它需要为从序列派生的类型添加'S)。