Uniones discriminadas en F#
Un conjunto cerrado de formas; el match debe cubrirlas todas.
// A discriminated union is a closed set of shapes; match must
// cover them all -- the compiler audits.
type Inspection =
| Routine
| SwarmCells of count: int
| Queenless of daysSince: int
let respond inspection =
match inspection with
| Routine -> "log and close up"
| SwarmCells n when n > 2 -> sprintf "split now: %d cells" n
| SwarmCells n -> sprintf "watch closely: %d cells" n
| Queenless days -> sprintf "order a queen, %d days gone" days
[Routine; SwarmCells 4; Queenless 6]
|> List.iter (respond >> printfn "%s")
Cómo funciona
- Los casos cargan datos:
SwarmCells of count: int. - Las guardas
whenparten un caso en severidades. - Agrega un caso y cada match que lo pierda deja de compilar.
Palabras clave y builtins usados aquí
letmatchoftypewhenwith
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 524
- Tokens
- 86
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 79 segundos.
Paso 2 de 3 en Tipos; paso 14 de 27 en Fundamentos del lenguaje.