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

特性

属性将额外信息附加到编译器用于更改声明处理方式的声明 Q# 。 属性用前导 @ 符号编写,后跟属性名称和带圆括号参数列表,并放置在它适用的声明之前。

@EntryPoint()
operation Main() : Result {
    use q = Qubit();
    H(q);
    MResetZ(q)
}

可以将多个属性应用于同一声明,方法是在声明之前将每个属性放在其自己的行上。

Q# 支持以下内置属性。

@EntryPoint()

@EntryPoint() 属性将操作或函数标记为程序的执行起点。 如果未指定入口点,编译器将从 Main() 操作开始执行(如果存在)。 可以将该 @EntryPoint() 属性放置在任何不采用输入参数的可调用项上,以改为使其成为入口点。

@EntryPoint()
operation MeasureOneQubit() : Result {
    use q = Qubit();
    H(q);
    MResetZ(q)
}

在不属于项目的单个.qs文件中工作时,还可以将目标配置文件名称传递给特性,例如@EntryPoint(Base)@EntryPoint(Adaptive_RI)@EntryPoint(Adaptive_RIF),或@EntryPoint(Unrestricted),设置程序的 QIR 目标配置文件。Q# 有关详细信息,请参阅 Quantum 计算目标配置文件

@Config(...)

@Config(...) 属性根据当前 目标配置文件的功能提供有关何时应将声明包含在编译中的预处理信息。 这样,库就可以为具有不同功能的目标提供可调用对象的不同实现。

有效参数为 Base、、AdaptiveIntegerComputationsFloatingPointComputationsBackwardsBranchingHigherLevelConstructsUnrestricted。 仅当功能不可用时,才能使用运算符否定参数not以包含声明。

@Config(Adaptive)
operation MeasureAndReset(q : Qubit) : Result {
    let result = M(q);
    if result == One {
        X(q);
    }
    result
}

@Config(not Adaptive)
operation MeasureAndReset(q : Qubit) : Result {
    MResetZ(q)
}

@Test()

该属性将 @Test() 可调用结果转换为单元测试。 只能将其应用于不采用输入参数的可调用方。 使用此属性标记的测试显示在Visual Studio Code的测试视图中,你可以在其中单独运行或作为组运行它们。 有关详细信息,请参阅 测试和调试 Q# 程序

@Test()
operation TestCase() : Unit {
    Fact(1 + 1 == 2, "Expected 1 + 1 to equal 2.");
}

内部可调用对象的属性

以下属性描述在 量子中间表示形式(QIR) 代码生成过程中如何处理内部可调用对象。 它们主要用于定义低级内部操作的库和硬件作者。

@SimulatableIntrinsic()

@SimulatableIntrinsic() 属性指示应将可调用对象视为 QIR 代码生成的内部可调用对象,而提供的正文仅在模拟期间使用。 这样,便可以为目标硬件不透明的操作提供模拟实现。

@Measurement()

@Measurement() 属性指示内部可调用对象是度量值。 该操作在生成的 QIR 中标记为 不可逆 ,输出 Result 值将移动到生成的函数的参数。

@Reset()

@Reset() 属性指示内部可调用对象是重置。 操作在生成的 QIR 中标记为 不可逆