Conversões de tipoType Conversions

Q#é uma linguagem fortemente dactilografada.Q# is a strongly-typed language. Em particular, Q# não é implicitamente lançado entre tipos distintos.In particular, Q# does not implicitly cast between distinct types. Por exemplo, 1 + 2.0 não é uma expressão Q# válida.For instance, 1 + 2.0 is not a valid Q# expression. Em vez disso, Q# fornece uma variedade de funções de conversão de tipo para a construção de novos valores de um determinado tipo.Rather, Q# provides a variety of type conversion functions for constructing new values of a given type.

Por exemplo, Length function tem um tipo de saída de , por isso a sua saída deve primeiro ser convertida para um Int antes de poder ser usada como parte de uma expressão de ponto Double flutuante.For example, Length function has an output type of Int, so its output must first be converted to a Double before it can be used as a part of a floating-point expression. Isto pode ser feito utilizando a IntAsDouble function função:This can be done using the IntAsDouble function function:

open Microsoft.Quantum.Convert as Convert;

function HalfLength<'T>(arr : 'T[]) : Double {
    return Convert.IntAsDouble(Length(arr)) / 2.0;
}

O Microsoft.Quantum.Convert namespace espaço de nomes fornece funções comuns de conversão de tipo para trabalhar com os tipos básicos incorporados, tais Int como, , , e Double BigInt Result Bool :The Microsoft.Quantum.Convert namespace namespace provides common type conversion functions for working with the basic built-in types, such as Int, Double, BigInt, Result, and Bool:

let bool = Convert.ResultAsBool(One);        // true
let big = Convert.IntAsBigInt(271);          // 271L
let indices = Convert.RangeAsIntArray(0..4); // [0, 1, 2, 3, 4]

O Microsoft.Quantum.Convert namespace espaço de nome também fornece algumas conversões mais exóticas, como, por FunctionAsOperation exemplo, que converte funções 'T -> 'U em novas operações. 'T => 'UThe Microsoft.Quantum.Convert namespace namespace also provides some more exotic conversions, such as FunctionAsOperation, which converts functions 'T -> 'U into new operations 'T => 'U.

Finalmente, a Q# biblioteca padrão fornece uma série de tipos definidos pelo utilizador, tais como Complex user defined type LittleEndian user defined type .Finally, the Q# standard library provides a number of user-defined types such as Complex user defined type and LittleEndian user defined type. Juntamente com estes tipos, a biblioteca padrão fornece funções BigEndianAsLittleEndian function como:Along with these types, the standard library provides functions such as BigEndianAsLittleEndian function:

open Microsoft.Quantum.Arithmetic as Arithmetic;

let register = Arithmetic.BigEndian(qubits);
IncrementByInteger(Arithmetic.BigEndianAsLittleEndian(register));