在F#中从union中随机选择一个实例

时间:2009-12-06 11:39:18

标签: f# union

在F#中,给出

type MyType = A | B | C | D | E | F | G

如何随机定义MyType实例?

2 个答案:

答案 0 :(得分:9)

这应该有效:

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

此代码假定union情况都是无效的,并且您使用的类型实际上是一个联合类型,但如果需要,可以很容易地明确检查这些假设并抛出有意义的异常。

答案 1 :(得分:5)

选择一个随机数,然后模式匹配那个不同分支返回不同时刻的数字?