Udostępnij za pośrednictwem


Deklaracje typów

Q# obsługuje typy struct zdefiniowane przez użytkownika. struct typy są podobne do typów rekordów w języku F#; są one niezmienne, ale obsługują konstrukcji kopiowania i aktualizacji.

Typy struktur

struct typy mogą zawierać tylko nazwane elementy i nie obsługują elementów anonimowych. Obsługiwana jest dowolna kombinacja nazwanych elementów, chociaż nie można zagnieżdżać elementów.

Następująca deklaracja definiuje na przykład Complex struktury, która ma dwa nazwane elementy Real i Imaginary, oba typy Double:

struct Complex {
    Real : Double,
    Imaginary : Double,
}

Dostęp do zawartych elementów można uzyskać za pomocą ich nazwy lub dekonstrukcji (aby uzyskać więcej informacji, zobacz dostęp do elementów). Możesz również uzyskać dostęp do krotki wszystkich elementów, w których kształt jest zgodny z elementem zdefiniowanym w deklaracji za pośrednictwem operatora odpakowywanie.

struct typy są przydatne z dwóch powodów. Po pierwsze, o ile biblioteki i programy korzystające ze zdefiniowanych typów uzyskują dostęp do elementów za pośrednictwem ich nazwy, a nie przez dekonstrukcję, typ można rozszerzyć tak, aby zawierał dodatkowe elementy później bez przerywania kodu biblioteki. W związku z tym uzyskiwanie dostępu do elementów za pośrednictwem dekonstrukcji jest zwykle zniechęcane.

Po drugie, Q# umożliwia przekazanie intencji i oczekiwań dla określonego typu danych, ponieważ nie ma automatycznej konwersji między wartościami dwóch typów struct, nawet jeśli ich typy elementów są identyczne.

Konstruktory struktury

Konstruktory dla nowych typów struct są generowane automatycznie przez kompilator podczas odczytywania definicji struct. W przypadku struktury Complex w poprzednim przykładzie można utworzyć wystąpienie za pomocą polecenia

let complexPair = Complex(1.4, 2.1);

Wystąpienia mogą być również definiowane przez użytkownika za pomocą słowa kluczowego new, na przykład

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

Możesz również skopiować istniejącą strukturę za pomocą składni ...

let copyPair = new Complex { ...complexPair };

Podczas kopiowania można określić poszczególne pola do zmiany

let updatedPair = new Complex { ...complexPair, Real = 3.5 };