2009-12-06 36 views

回答

5

選擇一個隨機數,然後模式匹配該數字與不同的分支返回不同的瞬間?

+0

我認爲F#可能有一個列出這些聯合構造函數的內置方式,如Haskell中的Bounded和Enum,但顯然不是。 – 2009-12-06 11:53:37

7

這應該工作:

let randInst<'t>() = 
    let cases = Reflection.FSharpType.GetUnionCases(typeof<'t>) 
    let index = System.Random().Next(cases.Length) 
    let case = cases.[index] 
    Reflection.FSharpValue.MakeUnion(case, [||]) :?> 't 

此代碼假定工會案件都是零元,並且您使用的類型實際上是一個聯合類型,但它會很容易明確檢查這些假設並在需要時拋出有意義的異常。