Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Q# suporta tipos de struct definidos pelo usuário.
struct tipos são semelhantes aos tipos de registro em F#; eles são imutáveis, mas suportam uma cópia e atualização construção.
Tipos de estrutura
struct tipos só podem conter itens nomeados e não suportam itens anônimos. Qualquer combinação de itens nomeados é suportada, embora os itens não possam ser aninhados.
A declaração a seguir, por exemplo, define um struct Complex que tem dois itens nomeados Real e Imaginary, ambos do tipo Double:
struct Complex {
Real : Double,
Imaginary : Double,
}
Você pode acessar os itens contidos por meio de seu nome ou por de desconstrução (para obter mais informações, consulte acesso ao item). Você também pode acessar uma tupla de todos os itens em que a forma corresponde à definida na declaração por meio do operador unwrap.
struct tipos são úteis por dois motivos. Primeiro, desde que as bibliotecas e programas que usam os tipos definidos acessem itens por meio de seu nome em vez de desconstrução, o tipo pode ser estendido para conter itens adicionais mais tarde sem quebrar nenhum código de biblioteca. Por isso, o acesso aos itens via desconstrução é desencorajado.
Em segundo lugar, Q# permite transmitir a intenção e as expectativas para um tipo de dados específico, uma vez que não há conversão automática entre valores de dois tipos de struct, mesmo que seus tipos de item sejam idênticos.
Construtores Struct
O compilador gera automaticamente construtores para novos tipos de struct quando lê uma definição de struct. Para a Complex struct no exemplo anterior, você pode criar uma instância com
let complexPair = Complex(1.4, 2.1);
Você também pode definir instâncias com a palavra-chave new, por exemplo
let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };
Você pode copiar uma struct existente com a sintaxe ...
let copyPair = new Complex { ...complexPair };
Ao copiar, você pode especificar campos individuais a serem alterados
let updatedPair = new Complex { ...complexPair, Real = 3.5 };