命名空間

在最上層,Q# 程式是由一組命名空間所組成。 除了註解之外,命名空間是 Q# 程式中唯一最上層的元素,而任何其他元素必須位於命名空間內。 每個檔案可能包含零個或多個命名空間,而且每個命名空間可能會跨越多個檔案。 Q# 不支援巢狀命名空間。

命名空間區塊是由關鍵字 namespace 所組成,後面接著命名空間名稱和括號 { } 內區塊的內容。 命名空間名稱包含一或多個合法符號的序列,並以點 (.) 分隔。 雖然命名空間名稱可能包含點以提高可讀性,但 Q# 不支援命名空間的相對參考。 例如,兩個命名空間 FooFoo.Bar 無關,而且沒有階層的概念。 尤其是,如果是 Foo.Bar 中定義的 Baz 函式,就無法開啟 Foo,然後再透過 Bar.Baz 存取該函式。

命名空間區塊可能包含 open 指示詞 ,以及 作業式和 類型 宣告。 這些可能會以任何順序發生,而且預設為遞迴,這表示可以依任何順序宣告和使用,而且可以呼叫本身;不需要在使用之前進行類型或可呼叫檔的宣告。

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 指示詞都只在該檔案中的命名空間片段中有效。