6

F# では、与えられた

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

MyType のインスタンスをランダムに定義するにはどうすればよいですか?

4

2 に答える 2

11

これは機能するはずです:

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

このコードは、共用体のケースがすべてnullであり、使用している型が実際には共用体型であることを前提としていますが、これらの前提条件を明示的に確認し、必要に応じて意味のある例外をスローするのは簡単です。

于 2009-12-06T16:03:07.563 に答える
6

乱数を選択し、その数をパターン マッチして、異なるブランチが異なるインスタントを返しますか?

于 2009-12-06T11:46:34.400 に答える