Share via


Espacios de nombres

En su nivel superior, un programa de Q# consta de un conjunto de espacios de nombres. Además de los comentarios, los espacios de nombres son los únicos elementos de nivel superior de un programa de Q# y cualquier otro elemento debe residir dentro de un espacio de nombres. Cada archivo puede contener cero o más espacios de nombres, y cada espacio de nombres puede abarcar varios archivos. Q# no admite espacios de nombres anidados.

Un bloque de espacio de nombres consta de la palabra clave namespace, seguido del nombre del espacio de nombres y del contenido del bloque dentro de llaves { }. Los nombres de espacio de nombres constan de una secuencia de uno o varios símbolos admitidos separados por un punto (.). Aunque los nombres de los espacios de nombres pueden contener puntos para mejorar la legibilidad, Q# no admite referencias relativas a espacios de nombres. Por ejemplo, dos espacios de nombres llamados Foo y Foo.Bar no están relacionados y no hay una noción de jerarquía. Específicamente, para una función Baz definida en Foo.Bar, no es posible abrir Foo y, a continuación, acceder a esa función mediante Bar.Baz.

Los bloques de espacio de nombres pueden contener directivas abiertas , así como declaraciones de operación, función y tipo . Estas se pueden producir en cualquier orden y son recursivas de manera predeterminada, lo que significa que se pueden declarar y usar en cualquier orden y pueden llamarse a sí mismas; no es necesario que la declaración de un tipo o un invocable preceda a su uso.

Directivas open

De manera predeterminada, se puede acceder a todo lo declarado en el mismo espacio de nombres sin ninguna calificación adicional. Sin embargo, las declaraciones de otro espacio de nombres solo se pueden usar calificando su nombre con el nombre del espacio de nombres al que pertenecen o abriendo ese espacio de nombres antes de usarlo, como se muestra en el ejemplo siguiente.

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

    // ...
}

En el ejemplo, se usa una directiva open para importar todos los tipos e invocables declarados en el espacio de nombres Microsoft.Quantum.Artithmetic. A continuación, se puede hacer referencia a ellos por su nombre no completo, a menos que ese nombre entre en conflicto con una declaración del bloque de espacio de nombres u otro espacio de nombres abierto.

Para evitar escribir el nombre completo y al mismo tiempo distinguir de dónde proceden determinados elementos, puede definir un nombre alternativo o alias, que suele ser más corto, para un espacio de nombres determinado. En este caso, todos los tipos e invocables declarados en ese espacio de nombres se pueden calificar en su lugar mediante el nombre corto definido. En el ejemplo anterior, este es el caso del espacio de nombres Microsoft.Quantum.Arrays. Por ejemplo, se puede usar la función IndexRange declarada en Microsoft.Quantum.Arrays mediante Array.IndexRange dentro de ese bloque de espacio de nombres.

Tanto si va a abrir un espacio de nombres como a definir un alias, open las directivas son válidas solo en el elemento de espacio de nombres de ese archivo.