Kopiera och uppdatera-uttryck
För att minska behovet av föränderliga bindningar stöder Q# du kopierings- och uppdateringsuttryck för värdetyper med objektåtkomst. Användardefinierade typer och matriser är båda oföränderliga och tillhör den här kategorin. Med användardefinierade typer kan du komma åt objekt via namn, medan matriser gör att du kan komma åt objekt via ett index eller indexintervall.
Kopiera och uppdatera uttryck instansierar ett nytt värde med alla objekt inställda på motsvarande värde i det ursprungliga uttrycket, förutom vissa angivna objekt, som är inställda på de som definierats till höger om uttrycket.
De konstrueras med en ternary-operator w/
<-
. Syntaxen w/
bör läsas som den ofta använda korta notationen för "with":
original w/ itemAccess <- modification
där original
är antingen ett uttryck av användardefinierad typ eller ett matrisuttryck. Motsvarande krav för itemAccess
och finns i Kopiera och uppdatera användardefinierade typer och Kopiera och uppdatera matrisermodification
.
När det gäller prioritet är operatorn copy-and-update vänster associativ och har lägst prioritet, och i synnerhet lägre prioritet än intervalloperatorn (..
) eller den villkorsstyrda operatorn ternary (?
|
).
Den valda vänstra associativiteten möjliggör enkel länkning av kopierings- och uppdateringsuttryck:
let model = Default<SequentialModel>()
w/ Structure <- ClassifierStructure()
w/ Parameters <- parameters
w/ Bias <- bias;
När det gäller alla operatorer som konstruerar ett uttryck av samma typ som det uttryck som används längst till vänster är motsvarande utvärderings- och omtilldelningsuttryck tillgängligt.
Följande två instruktioner uppnår till exempel följande: Den första instruktionen deklarerar en föränderlig variabel arr
och binder den till standardvärdet för en heltalsmatris. Den andra instruktionen skapar sedan en ny matris med det första objektet (med index 0) inställt på 10 och omtilldelar det till arr
.
mutable arr = [0, size = 3]; // arr contains [0, 0, 0]
set arr w/= 0 <- 10; // arr contains [10, 0, 0]
Den andra instruktionen är bara en förkortning för den mer utförliga syntaxen set arr = arr w/ 0 <- 10;
.
Kopiera och uppdatera användardefinierade typer
Om värdet original
är en användardefinierad typ anger du itemAccess
namnet på det objekt som avviker från det ursprungliga värdet. Det här är inte bara ett annat uttryck, som original
och modification
, eftersom möjligheten att använda objektnamnet utan ytterligare kvalificering är begränsad till den här kontexten. Det är ett av två kontextuella uttryck i Q#.
Typen av modification
uttryck måste matcha typen av det namngivna objektet som avviker.
Om till exempel complex
innehåller värdet Complex(0., 0.)
, där typen Complex
definieras här, så
complex w/ Re <- 1.
är ett uttryck av typen Complex
som utvärderas till Complex(1., 0.)
.
Kopiera och uppdatera matriser
För matriser itemAccess
kan vara ett godtyckligt uttryck av lämplig typ. Samma typer som är giltiga för matrisslicering är giltiga i den här kontexten. Konkret kan uttrycket itemAccess
vara av typen Int
eller Range
. Om itemAccess
är ett värde av typen Int
måste typen matcha modification
matrisens objekttyp. Om itemAccess
är ett värde av typen Range
måste typen av modification
vara samma som matristypen.
Om till exempel arr
innehåller en matris [0, 1, 2, 3]
kan du
arr w/ 0 <- 10
är matrisen[10, 1, 2, 3]
.arr w/ 2 <- 10
är matrisen[0, 1, 10, 3]
.arr w/ 0..2..3 <- [10, 12]
är matrisen[10, 1, 12, 3]
.
Med kopierings- och uppdateringsuttryck kan nya matriser skapas effektivt baserat på befintliga. Implementeringen för kopierings- och uppdateringsuttryck undviker att kopiera hela matrisen genom att duplicera endast de nödvändiga delarna för att uppnå önskat beteende och utför en ändring på plats om möjligt. Därför medför matrisinitieringar inte ytterligare omkostnader på grund av oföränderlighet.
Namnområdet Microsoft.Quantum.Arrays
innehåller en arsenal av praktiska verktyg för att skapa och manipulera matriser.
Kopierings- och uppdateringsuttryck är ett praktiskt sätt att skapa nya matriser i farten. följande uttryck utvärderas till exempel till en matris med alla objekt inställda PauliI
på , förutom objektet i indexet i
, som är inställt PauliZ
på :
[PauliI, size = n] w/ i <- PauliZ
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för