Условные выражения
Условные выражения состоят из трех подвыражений, самое левое из которых имеет тип Bool
и определяет, какое из остальных двух подвыражений вычисляется. Они имеют вид
cond ? ifTrue | ifFalse
В частности, если результатом вычисления cond
является true
, результатом вычисления условного выражения является ifTrue
. В противном случае результат вычисления — ifFalse
. Другое выражение (ifFalse
или ifTrue
соответственно) никогда не вычисляется, как и в случае с ветвями в операторе if
.
Например, в выражении a == b ? C(qs) | D(qs)
в том случае, если a
равно b
, вызывается вызываемый объект C
. В противном случае вызывается D
.
Типы выражений ifTrue
и ifFalse
должны иметь общий базовый тип. Независимо от того, какое из двух выражений в итоге возвращает значение, являющееся результатом вычисления выражения, его тип всегда будет соответствовать определенному базовому типу.
Например, если
-
Op1
типаQubit[] => Unit is Adj
-
Op2
типаQubit[] => Unit is Ctl
-
Op3
типаQubit[] => Unit is Adj + Ctl
а затем —
-
cond ? Op1 | Op2
типаQubit[] => Unit
-
cond ? Op1 | Op3
типаQubit[] => Unit is Adj
-
cond ? Op2 | Op3
типаQubit[] => Unit is Ctl
Дополнительные сведения см. в разделе Создание подтипов и вариантность.