你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

条件分支

条件分支以表达式形式 if 表示。 表达式 if 由一个 if 子句组成,后跟零个或多个 elif 子句,还有一个其他块。 每个子句遵循以下模式

keyword condition {
    <statements>
}

其中 keyword 需分别替换为 ifelifcondition 是类型 Bool 的表达式,<statements> 需替换为零个或多个语句。 optional else-block 由 else 关键字后跟在大括号 { }中的零个或多个语句组成。

求值为 truecondition 的第一个块将运行。 如果任何没有条件求值为 true,则运行 else 块(如果存在)。 该块在其自己的范围内执行,这意味着在块结束时,作为块的一部分进行的任何绑定都不可见。

例如,假设 qubitsQubit[] 类型的值,r1r2 的类型为 Result

if r1 == One {
    let q = qubits[0];
    H(q);
} 
elif r2 == One {
    let q = qubits[1];
    H(q);
} 
else {
    H(qubits[2]);
}

还可以通过条件表达式的形式表达简单分支。

特定于目标的限制

控制流结构与量子计算之间的紧密集成对于当前的量子硬件提出了挑战。 某些量子处理器不支持基于测量结果的分支。 因此,比较 Result 类型的值始终会导致针对在此类硬件上运行的 Q# 程序发生编译错误。

其他量子处理器支持基于测量结果的特定类型的分支。 支持的更常规 if 表达式 Q# 编译为可在此类处理器上运行的合适指令。 施加的限制是,类型的 Result 值只能作为操作中表达式中 if 条件的一部分进行比较。 此外,有条件运行的块不能包含任何 return 表达式或更新在该块外部声明的可变变量。