네임스페이스

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

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

네임스페이스 블록에는 연산, 함수형식 선언뿐만 아니라 열린 지시문도 포함될 수 있습니다. 이들은 임의의 순서로 발생할 수 있으며 기본적으로 재귀적입니다. 즉, 임의의 순서로 선언 및 사용할 수 있으며 자신을 호출할 수 있습니다. 사용 전에 형식 또는 호출 가능 요소를 선언할 필요가 없습니다.

open 지시문

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

namespace Microsoft.Quantum.Samples {
    
    open Microsoft.Quantum.Arithmetic; 
    open Microsoft.Quantum.Arrays as Array; 

    // ...
}

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

특정 요소의 출처를 계속 구별하면서 전체 이름을 입력하지 않으려면 특정 네임스페이스에 대해 대체 이름 또는 일반적으로 더 짧은 별칭을 정의할 수 있습니다. 이 경우 해당 네임스페이스에 선언된 모든 형식 및 호출 가능 항목은 대신 정의된 짧은 이름으로 한정될 수 있습니다. 이전 예에서 이는 Microsoft.Quantum.Arrays 네임스페이스의 경우입니다. 예를 들어, Microsoft.Quantum.Arrays에 선언된 IndexRange 함수는 해당 네임스페이스 블록 내에서 Array.IndexRange를 통해 사용할 수 있습니다.

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