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.
Nota:
Si no declara explícitamente un espacio de nombres, el Q# compilador usa el nombre de archivo como nombre del espacio de nombres.
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 de importación, operaciones, funciones y declaraciones de tipo . Estos elementos pueden producirse en cualquier orden y son recursivos de forma predeterminada, lo que significa que se pueden declarar y usar en cualquier orden y pueden llamarse a sí mismos. No es necesario que la declaración de un tipo o que se pueda llamar precede a su uso.
Directivas de importación
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 {
import Microsoft.Quantum.Arithmetic.*;
import Microsoft.Quantum.Arrays.* as Array;
// ...
}
Nota:
En el caso de los espacios de nombres de la biblioteca estándar Q# , la raíz del espacio de nombres se puede simplificar en Std
. Por ejemplo, el ejemplo anterior podría volver a escribirse como:
import Std.Arithmetic.*;
import Std.Arrays.* as Array;
En el ejemplo se usa una import
directiva para importar todos los tipos y los invocables declarados en el Microsoft.Quantum.Arithmetic
espacio de nombres. A continuación, puede hacer referencia a ellos por su nombre no calificado a menos que ese nombre entre en conflicto con una declaración en el bloque de espacio de nombres u otro espacio de nombres abierto.
Para evitar escribir el nombre completo mientras se distingue de dónde proceden determinados elementos, puede definir un nombre alternativo o alias para un espacio de nombres determinado. En este caso, puede calificar todos los tipos y invocables declarados en ese espacio de nombres por el nombre corto definido en su lugar.
En el ejemplo anterior se usa un alias para el Microsoft.Quantum.Arrays
espacio de nombres. A continuación, puede usar la función IndexRange
, declarada en Microsoft.Quantum.Arrays
, por ejemplo, a través Array.IndexRange
de dentro de ese bloque de espacio de nombres.
Tanto si va a abrir un espacio de nombres como si define un alias, import
las directivas son válidas solo en la parte del espacio de nombres de ese archivo.