Dela via


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 formen

cond ? ifTrue | ifFalse

Mer specifikt, om cond utvärderas till trueutvärderas villkorsuttrycket till ifTrue uttryck. annars utvärderas det till uttrycket ifFalse. Det andra uttrycket (ifFalse respektive ifTrue uttryck) 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 banropas till exempel den anropbara C. Annars anropas D.

Typerna av ifTrue och ifFalse-uttrycket måste ha en gemensam bastyp. Oberoende av vilket som i slutändan ger det värde som uttrycket utvärderas till matchar dess typ alltid den fastställda bastypen.

Om du till exempel

  • Op1 är av typen Qubit[] => Unit is Adj
  • Op2 är av typen Qubit[] => Unit is Ctl
  • Op3 är av typen Qubit[] => Unit is Adj + Ctl

sedan...

  • cond ? Op1 | Op2 är av typen Qubit[] => Unit
  • cond ? Op1 | Op3 är av typen Qubit[] => Unit is Adj
  • cond ? Op2 | Op3 är av typen Qubit[] => Unit is Ctl

Mer information finns i undertypning.