English 中文(简体)
Randomly choose an instance from union in F#
原标题:
  • 时间:2009-12-06 11:39:18
  •  标签:
  • f#
  • union

In F#, given

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

How do I randomly define an instance of MyType?

最佳回答

Select a random number, then pattern match that number with different branches returning a different instant?

问题回答

This ought to work:

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

This code assumes that the union cases are all nullary and that the type you re using is actually a union type, but it would be easy to explicitly check those assumptions and throw meaningful exceptions if desired.





相关问题
F#: Storing and mapping a list of functions

I have a number of events that happen in a game. I want to control the time and order at which these events occur. For example: Event 1: Show some text on screen for N frames & play a sound ...

Creating Silverlight 3 applications with F#

Is there an easy way to create Silverlight 3 applications with F# (October CTP)? I have seen the F# for Silverlight, but that only works with the May CTP. I am using Visual Studio Integrated Shell ...

How To Change List of Chars To String?

In F# I want to transform a list of chars into a string. Consider the following code: let lChars = [ a ; b ; c ] If I simply do lChars.ToString, I get "[ a ; b ; c ]". I m trying to get "abc". I ...

Unzipping ZLIB compressed portions of a binary file

I m reading a file(a flash swf) from .Net 3.5 that has a header which states whether the body of the file/Stream is compressed or not. However, I m having problems-after I rewrap the basic File ...

Pretty print a tree

Let s say I have a binary tree data structure defined as follows type a tree = | Node of a tree * a * a tree | Nil I have an instance of a tree as follows: let x = Node (Node (...

F# String Pattern-Matching with Wildcards

As part of a project I have assigned myself as a way of improving my knowledge of F# and functional programming in general, I am attempting to write a string pattern-matching algorithm from scratch ...

热门标签