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 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 btill 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 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 undertyp.