我試圖寫:如何聲明一個返回滿足F#中多個約束的類型的泛型函數?
type A() =
interface IX with ...
interface IY with ...
type B() =
interface IX with ...
interface IY with ...
let mk t : 'T when 'T :> IX and 'T :> IY =
match t with
| Choice1 -> new A()
| Choice2 -> new B()
注意對MK的返回類型的類型約束。它不編譯,但編譯器抱怨說它不能將A和B轉換成'T.
只是爲了好玩,比較C#http://pastebin.com/daFFKTwB中的等效代碼。你試圖返回一個具體類型的'T,但是你不會在你的函數的其他部分使用這種類型 - 你試圖返回一個具體的A或B,而類型檢查器不能找出什麼你真的打算。 – Juliet 2010-12-02 19:50:36
需要考慮的更多:如果我寫`let x,y = mk Choice1,mk Choice2`,`x`和`y`有什麼類型? – Juliet 2010-12-02 20:46:55