Поделиться через


Условные выражения

Условные выражения состоят из трех подвыражений, самое левое из которых имеет тип 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

Дополнительные сведения см. в разделе Создание подтипов и вариантность.