Partilhar via


Chamar expressões

As expressões de chamada são uma parte importante de qualquer linguagem de programação. As chamadas de operação e função, assim como aplicativos parciais, podem ser usadas como uma expressão em qualquer lugar, desde que o valor retornado seja de um tipo adequado.

A utilidade de chamar operações nesta forma reside principalmente na depuração, e tais chamadas de operação são uma das construções mais comuns em qualquer programa Q#. Ao mesmo tempo, as operações só podem ser chamadas de dentro de outras operações e não de dentro de funções. Para obter mais informações, consulte também Qubits.

Com callables sendo valores de primeira classe, as expressões de chamada são uma maneira genérica de suportar padrões que não são comuns o suficiente para merecer sua própria construção de linguagem dedicada, ou sintaxe dedicada (ainda) não foi introduzida por outros motivos. Alguns exemplos de métodos de biblioteca que servem a esse propósito são ApplyIf, que invoca uma operação condicionada a um bit clássico sendo definido; ApplyToEach, que aplica uma determinada operação a cada elemento de uma matriz; e ApplyWithInputTransformation, como mostrado na amostra a seguir.

    operation ApplyWithInputTransformation<'TArg, 'TIn>(
        fn : 'TIn -> 'TArg,
        op : 'TArg => Unit,
        input : 'TIn
    ) : Unit {

        op(fn(input));
    }

ApplyWithInputTransformation usa uma função fn, uma operação ope um valor input como argumentos e, em seguida, aplica a função dada à entrada antes de invocar a operação dada com o valor retornado da função.

Para que o compilador gere automaticamente as especializações para suportar functors específicos, geralmente requer que as operações chamadas suportem esses functors também. As duas exceções são chamadas em blocos externos de conjugações , que sempre precisam apoiar o functor Adjoint, mas nunca precisam apoiar o functor Controlled, e operações autoadjuntas, que suportam o functor Adjoint sem impor quaisquer requisitos adicionais às chamadas individuais.