Partilhar via


Espaços de nomes

Em seu nível superior, um Q# programa consiste em um conjunto de namespaces. Além dos comentários, os namespaces são os únicos elementos de nível superior em um Q# programa, e quaisquer outros elementos devem residir dentro de um namespace. Cada arquivo pode conter zero ou mais namespaces, e cada namespace pode abranger vários arquivos. Q# não suporta namespaces aninhados.

Nota

Se você não declarar explicitamente um namespace, o Q# compilador usará o nome do arquivo como o nome do namespace.

Um bloco de namespace consiste na palavra-chave namespace, seguida pelo nome do namespace e pelo conteúdo do bloco dentro de chaves { }. Os nomes de namespace consistem em uma sequência de um ou mais símbolos legais separados por um ponto (.). Embora os nomes de namespace possam conter pontos para melhor legibilidade, Q# não oferece suporte a referências relativas a namespaces. Por exemplo, dois namespaces Foo e Foo.Bar não estão relacionados, e não há noção de uma hierarquia. Em particular, para uma função Baz definida em Foo.Bar, não é possível abrir Foo e, em seguida, aceder a essa função através de Bar.Baz.

Os blocos de namespace podem conter diretivas de importação, operações, funções e declarações de tipo . Esses elementos podem ocorrer em qualquer ordem e são recursivos por padrão, o que significa que podem ser declarados e usados em qualquer ordem e podem se chamar. Não é necessário que a declaração de um tipo ou exigível preceda a sua utilização.

Diretivas relativas à importação

Por padrão, tudo o que é declarado dentro do mesmo namespace pode ser acessado sem qualificação adicional. No entanto, as declarações em um namespace diferente só podem ser usadas qualificando seu nome com o nome do namespace ao qual pertencem ou abrindo esse namespace antes de ser usado, conforme mostrado no exemplo a seguir.

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

    // ...
}

Nota

Para namespaces na biblioteca padrão Q# , a raiz do namespace pode ser simplificada para Std. Por exemplo, o exemplo anterior pode ser reescrito como:

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

O exemplo usa uma import diretiva para importar todos os tipos e callables declarados Microsoft.Quantum.Arithmetic no namespace. Em seguida, você pode se referir a eles por seu nome não qualificado, a menos que esse nome entre em conflito com uma declaração no bloco de namespace ou outro namespace aberto.

Para evitar digitar o nome completo e, ao mesmo tempo, distinguir de onde vêm determinados elementos, você pode definir um nome alternativo, ou alias, para um namespace específico. Nesse caso, você pode qualificar todos os tipos e chamáveis declarados nesse namespace pelo nome abreviado definido. O exemplo anterior usa um alias para o Microsoft.Quantum.Arrays namespace. Em seguida, você pode usar a função IndexRange, declarada em Microsoft.Quantum.Arrays, por exemplo, através desse Array.IndexRange bloco de namespace.

Quer você esteja abrindo um namespace ou definindo um alias, import as diretivas são válidas em toda a parte do namespace somente nesse arquivo.