Enumerações (F#)
Enumerações, também conhecido como enums, são tipos integrais onde os rótulos são atribuídos a um subconjunto dos valores.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.Se uma enumeração destina-se para representar as posições de bit, você também deve usar o FlagsAttribute atributo.
O tipo subjacente da enumeração é determinado do literal que é utilizada, para que, por exemplo, você pode usar literais com um sufixo, como 1u, 2ue assim por diante, para um unsigned inteiro (uint32) tipo.
Quando você consultar os valores nomeados, você deve usar o nome do tipo de enumeração próprio como um qualificador, ou seja, enum-name.value1, não apenas value1.Esse comportamento é diferente do discriminada uniões.Isso ocorre porque as enumerações sempre tenham a RequireQualifiedAccessatributo.
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 facilmente enumerações de converter o tipo subjacente usando o operadorapropriado, conforme mostrado no código a seguir.
// Conversion to an integral type.
let n = int col1
Enumerated types can have one of the following underlying types: 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 herdadas do Enum, que por sua vez é herdada do ValueType.Assim, eles são tipos de valores que estão localizados na pilha ou embutido no objetode recipiente, e qualquer valor do tipo subjacente é um valor válido da enumeração.Isso é significativo quando valores de padrões coincidentes na enumeração , porque você deve fornecer um padrão que captura os valores sem nome.
O enuma função na F# biblioteca pode ser usada para gerar um valor de enumeração , até mesmo um valor diferente do predefinido, valores nomeados. Você pode usar o enuma função da seguinte maneira.
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)