Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Q# podporuje přístup k položkám polí a pro typy struct
. V obou případech je přístup jen pro čtení; hodnotu nelze změnit bez vytvoření nové instance pomocí výrazu copy-and-update.
Přístup k položce pole a řezy polí
Při zadání maticového výrazu a výrazu typu Int
nebo Range
lze nový výraz vytvořit pomocí operátoru přístupu k položce pole, který se skládá z [
a ]
.
Pokud je výraz uvnitř závorek typu Int
, nový výraz obsahuje položku pole v tomto indexu.
Pokud je například arr
typu Double[]
a obsahuje pět nebo více položek, pak arr[4]
je výraz typu Double
.
Pokud je výraz uvnitř závorek typu Range
, nový výraz obsahuje pole všech položek indexovaných zadaným Range
. Pokud je Range
prázdný, je výsledné pole prázdné.
Příklad:
let arr = [10, 11, 36, 49];
let ten = arr[0]; // contains the value 10
let odds = arr[1..2..4]; // contains the value [11, 49]
let reverse = arr[...-1...]; // contains the value [49, 36, 11, 10]
Na posledním řádku příkladu byla pro usnadnění vynechána počáteční a koncová hodnota rozsahu. Další informace naleznete v tématu Kontextové výrazy.
Pokud výraz pole není jednoduchý identifikátor, musí být uzavřen v závorkách, aby bylo možné extrahovat položku nebo řez.
Pokud jsou například arr1
a arr2
obě pole celých čísel, bude položka z zřetězení vyjádřena jako (arr1 + arr2)[13]
. Další informace najdete v tématu Priorita a asociativita.
Všechna pole v Q# jsou založená na nule, tj. první prvek pole arr
je vždy arr[0]
.
Výjimka se vyvolá za běhu, pokud je index nebo jeden z indexů použitých pro řezy mimo hranice pole, například pokud je menší než nula nebo větší nebo rovna délce pole.
Přístup k položce pro typy struktur
K obsaženým položkám v struct
lze přistupovat dvěma způsoby:
- Použití tečky (
.
) - Dekonstrukce pomocí operátoru
unwrap
(!
).
Například vzhledem ke struktuře Complex
struct Complex {
Real : Double,
Imaginary : Double,
}
// create an instance of type Complex
let complex = Complex(1., 0.);
// item access via deconstruction
let (re, _) = complex!;
// item access via name reference
let im = complex.Imaginary;
Přístup prostřednictvím dekonstrukce využívá operátor unwrap (!
). Operátor unwrap vrátí řazenou kolekci členů všech obsažených položek, kde tvar řazené kolekce členů odpovídá řazené kolekci členů definované v deklaraci a jedna položka řazená kolekce členů je ekvivalentní samotné položce (viz tento oddíl).
Operátor !
má nižší prioritu než oba operátory přístupu k položkě, ale vyšší prioritu než jakýkoli jiný operátor. Úplný seznam priorit najdete v tématu Priorita a asociativita.
Další informace o syntaxi dekonstrukce naleznete v tématu Deklarace proměnných a opětovné přiřazení.