네임스페이스

최상위 수준에서 Q# 프로그램은 네임스페이스 집합으로 구성됩니다. 주석을 제외하고 네임스페이스는 Q# 프로그램의 유일한 최상위 요소이며 다른 모든 요소는 네임스페이스 내에 있어야 합니다. 각 파일에는 0개 이상의 네임스페이스가 포함될 수 있으며 각 네임스페이스는 여러 파일에 걸쳐 있을 수 있습니다. Q#은 중첩된 네임스페이스를 지원하지 않습니다.

참고 항목

네임스페이스를 명시적으로 선언하지 않으면 컴파일러는 파일 이름을 네 Q# 임스페이스 이름으로 사용합니다.

네임스페이스 블록은 키워드 namespace, 네임스페이스 이름, 중괄호 { } 안의 블록 콘텐츠로 구성됩니다. 네임스페이스 이름은 점()으로 구분된 하나 이상의 . 시퀀스로 구성됩니다. 더 나은 가독성을 위해 네임스페이스 이름에 점이 포함될 수 있지만 Q#은 네임스페이스에 대한 상대 참조를 지원하지 않습니다. 예를 들어, 두 개의 네임스페이스 FooFoo.Bar는 관련이 없으며 계층 구조의 개념이 없습니다. 특히, Baz에 정의된 함수 Foo.Bar의 경우 를 연 다음 Foo를 통해 해당 함수에 액세스할 수 Bar.Baz.

네임스페이스 블록에는 가져오기 지시문, 작업, 함수 및 형식 선언이 포함될 수 있습니다. 이러한 요소는 순서에 관계없이 발생할 수 있으며 기본적으로 재귀적이므로 어떤 순서로든 선언하고 사용할 수 있으며 자신을 호출할 수 있습니다. 형식 또는 호출 가능 형식의 선언을 사용하기 전에 선언할 필요가 없습니다.

Import 지시문

기본적으로 동일한 네임스페이스 내에서 선언된 모든 항목은 추가 한정 없이 액세스할 수 있습니다. 그러나 다음 예와 같이 다른 네임스페이스의 선언은 해당 이름을 해당 네임스페이스의 이름으로 한정하거나 사용하기 전에 해당 네임스페이스를 열어야만 사용할 수 있습니다.

namespace Microsoft.Quantum.Samples {
    
    import Microsoft.Quantum.Arithmetic.*; 
    import Microsoft.Quantum.Arrays.* as Array; 

    // ...
}

참고 항목

표준 Q# 라이브러리의 네임스페이스의 경우 네임스페이스의 루트를 .로 단순화할 Std수 있습니다. 예를 들어 이전 예제를 다음과 같이 다시 작성할 수 있습니다.

import Std.Arithmetic.*; 
import Std.Arrays.* as Array; 

이 예제에서는 지시문을 import 사용하여 네임스페이스에 Microsoft.Quantum.Arithmetic 선언된 모든 형식 및 호출 가능 항목을 가져옵니다. 그런 다음 해당 이름이 네임스페이스 블록 또는 다른 열린 네임스페이스의 선언과 충돌하지 않는 한 정규화되지 않은 이름으로 참조할 수 있습니다.

특정 요소의 원본 위치를 구분하면서 전체 이름을 입력하지 않도록 하려면 특정 네임스페이스에 대한 대체 이름 또는 별칭을 정의할 수 있습니다. 이 경우 해당 네임스페이스에 선언된 모든 형식 및 호출 가능 항목을 정의된 짧은 이름으로 한정할 수 있습니다. 이전 예제에서는 네임스페이스에 대한 별칭을 Microsoft.Quantum.Arrays 사용합니다. 그런 다음, 네임스페이스 블록 내에서 선언된 IndexRange함수Microsoft.Quantum.Arrays(예: Array.IndexRange 해당 네임스페이스 블록 내에서)를 사용할 수 있습니다.

네임스페이스를 열거나 별칭 import 을 정의하든 지시문은 해당 파일의 네임스페이스 조각 전체에서만 유효합니다.