2013-03-01 61 views
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 

回答

2

我認爲,靈活的類型在第二種情況下限制,因爲你明確聲明的方法只有一個類型參數'T的通用方法。一個靈活的類型被刪除到另一個類型參數,並且如果你明確地設置參數,編譯器不能添加那個(隱藏)類型參數。

第一個聲明對應於這樣的事情:

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

如果你明確地說,該方法只需要輸入參數'T,那麼編譯器不能產生這樣的方法(因爲它需要添加'S爲從序列派生的類型)。

+0

有用瞭解..我覺得我很困惑這一點,沒有淨化根本原因。 – nicolas 2013-03-01 14:59:18