Compartir a través de


Declaraciones de tipos

Q# admite tipos de struct definidos por el usuario. struct tipos son similares a los tipos de registro en F#; son inmutables, pero admiten una construcción de de copia y actualización.

Tipos de estructura

struct tipos solo pueden contener elementos con nombre y no admiten elementos anónimos. Se admite cualquier combinación de elementos con nombre, aunque no se pueden anidar elementos.

La siguiente declaración, por ejemplo, define una estructura Complex que tiene dos elementos con nombre Real y Imaginary, ambos de tipo Double:

struct Complex {
    Real : Double,
    Imaginary : Double,
}

Puede acceder a los elementos contenidos a través de su nombre o por deconstrucción (para obtener más información, vea acceso a elementos). También puede acceder a una tupla de todos los elementos donde la forma coincide con la definida en la declaración a través del operador unwrap de .

struct tipos son útiles por dos motivos. En primer lugar, siempre que las bibliotecas y programas que usan los tipos definidos accedan a los elementos a través de su nombre en lugar de deconstrucción, el tipo se puede extender para contener elementos adicionales más adelante sin interrumpir ningún código de biblioteca. Por este motivo, el acceso a los elementos a través de la deconstrucción suele desaconsejarse.

En segundo lugar, Q# permite transmitir la intención y las expectativas de un tipo de datos específico, ya que no hay ninguna conversión automática entre los valores de dos tipos de struct, incluso si sus tipos de elemento son idénticos.

Constructores de estructura

El compilador genera automáticamente constructores para nuevos tipos de struct cuando lee una definición de struct. Para la estructura Complex en el ejemplo anterior, puede crear una instancia con

let complexPair = Complex(1.4, 2.1);

El usuario también puede definir instancias con la palabra clave new, por ejemplo,

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

También puede copiar una estructura existente con la sintaxis de ...

let copyPair = new Complex { ...complexPair };

Al copiar, puede especificar campos individuales para cambiar.

let updatedPair = new Complex { ...complexPair, Real = 3.5 };