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

sth*_*ers 5 union f#

在F#,给出

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

如何随机定义MyType实例?

kvb*_*kvb 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
Run Code Online (Sandbox Code Playgroud)

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


Ric*_*ard 5

选择一个随机数,然后模式匹配该数字与不同的分支返回不同的瞬间?