Enumerações (F#)
Enumerações, também conhecido como enums, são tipos que possuem um conjunto definido de valores nomeados. Você pode usá-los no lugar de literais para tornar o código mais legível e fácil manutenção.
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
Comentários
Uma enumeração se parece muito com uma união discriminada que tem valores simples, exceto que os valores podem ser especificados. Normalmente, os valores são inteiros que começam com 0 ou 1, ou números inteiros que representam as posições de bit. O tipo subjacente da enumeração é determinado do literal que é usado, para que, por exemplo, você pode usar literais com um sufixo, como 1u, 2ue assim por diante, para um inteiro sem sinal (uint32) tipo.
Quando você consultar os valores nomeados, você deve usar o nome do tipo de enumeração como um qualificador, ou seja, enum-name.value1, não apenas value1. Esse comportamento difere das uniões discriminadas. Isso ocorre porque as enumerações sempre tenham a RequireQualifiedAccess atributo.
O código a seguir mostra a declaração e o uso de uma enumeração.
// Declaration of an enumeration.
type Color =
| Red = 0
| Green = 1
| Blue = 2
// Use of an enumeration.
let col1 : Color = Color.Red
Você pode converter facilmente enumerações para o tipo subjacente usando o operador apropriado, conforme mostrado no código a seguir.
// Conversion to an integral type.
let n = int col1
Os tipos enumerados podem ter um dos seguintes tipos de base: sbyte, byte, int16, uint16, int32, uint32, int64, uint16, uint64, and char. Tipos de enumeração são representados na.NET Framework como tipos que são herdados do Enum, que por sua vez é herdada da ValueType. Assim, eles são os tipos de valor que estão localizados na pilha ou embutido no objeto de recipiente e qualquer valor de tipo subjacente é um valor válido da enumeração. Isso é significativo quando valores de enumeração de correspondência de padrão, porque você precisa fornecer um padrão que captura os valores sem nome.
O enum a função na biblioteca do F# pode ser usada para gerar um valor de enumeração, até mesmo um valor diferente do predefinido, chamado de valores. Você pode usar o enum função como segue:
let col2 = enum<Color>(3)
O padrão enum função funciona com o tipo de int32. Portanto, não pode ser usado com tipos de enumeração que possuem outros tipos subjacentes. Em vez disso, use o seguinte.
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)