Dichiarazioni di tipo
Q# supporta tipi di struct
definiti dall'utente.
Tipi di struct
struct
tipi possono contenere solo elementi denominati e non supportano elementi anonimi. È supportata qualsiasi combinazione di elementi denominati, anche se gli elementi non possono essere annidati.
La dichiarazione seguente, ad esempio, definisce un Complex
struct con due elementi denominati Real
e Imaginary
, entrambi di tipo Double
:
struct Complex {
Real : Double,
Imaginary : Double,
}
È possibile accedere agli elementi contenuti tramite il nome o di decostruzione . Per altre informazioni, vedere accesso agli elementi. È anche possibile accedere a una tupla di tutti gli elementi in cui la forma corrisponde a quella definita nella dichiarazione tramite l'operatore unwrap.
struct
tipi sono utili per due motivi. Prima di tutto, purché le librerie e i programmi che usano i tipi definiti accingano agli elementi tramite il nome anziché tramite la decostruzione, il tipo può essere esteso per contenere elementi aggiuntivi in un secondo momento senza interrompere alcun codice di libreria. Per questo motivo, l'accesso agli elementi tramite la decostruzione è in genere sconsigliato.
In secondo luogo, Q# consente di comunicare la finalità e le aspettative per un tipo di dati specifico poiché non esiste alcuna conversione automatica tra valori di due tipi di struct
, anche se i tipi di elemento sono identici.
Costruttori di struct
I costruttori per i nuovi tipi di struct
vengono generati automaticamente dal compilatore quando legge una definizione di struct
. Per lo struct Complex
nell'esempio precedente, è possibile creare un'istanza con
let complexPair = Complex(1.4, 2.1);
Le istanze possono anche essere definite dall'utente con la parola chiave new
, ad esempio
let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };
È anche possibile copiare uno struct esistente con la sintassi ...
let copyPair = new Complex { ...complexPair };
Durante la copia, è possibile specificare singoli campi da modificare
let updatedPair = new Complex { ...complexPair, Real = 3.5 };