Villkorliga uttryck
Villkorsuttryck består av tre underuttryck, där det vänstra deluttrycket är av typen Bool
och avgör vilket av de två andra underuttrycken som utvärderas. De är av formatet
cond ? ifTrue | ifFalse
Mer specifikt, om cond
utvärderas till true
, utvärderas villkorsuttrycket till ifTrue
uttrycket. Annars utvärderas det till ifFalse
uttrycket. Det andra uttrycket ( ifFalse
och ifTrue
-uttrycket) utvärderas aldrig, ungefär som grenarna i en if
-instruktion.
I ett uttryck a == b ? C(qs) | D(qs)
, om a
är lika med , anropas b
till exempel det anropbara C
objektet. Annars D
anropas.
Typerna av ifTrue
och uttrycket ifFalse
måste ha en gemensam bastyp. Oberoende av vilket som i slutändan ger det värde som uttrycket utvärderar, matchar dess typ alltid den definierade bastypen.
Om till exempel
-
Op1
är av typenQubit[] => Unit is Adj
-
Op2
är av typenQubit[] => Unit is Ctl
-
Op3
är av typenQubit[] => Unit is Adj + Ctl
sedan
-
cond ? Op1 | Op2
är av typenQubit[] => Unit
-
cond ? Op1 | Op3
är av typenQubit[] => Unit is Adj
-
cond ? Op2 | Op3
är av typenQubit[] => Unit is Ctl
Mer information finns i undertyp.