Partilhar via


Chamar expressões

As expressões de chamadas são uma parte importante de qualquer linguagem de programação. As chamadas de operações e funções, tal como as aplicações parciais, podem ser utilizadas como uma expressão em qualquer lugar, desde que o valor devolvido seja de um tipo adequado.

A utilidade das operações de chamadas neste formulário reside principalmente na depuração e essas chamadas de operação são uma das construções mais comuns em qualquer Q# programa. Ao mesmo tempo, as operações só podem ser chamadas a partir de outras operações e não a partir de funções. Para obter mais informações, veja também Qubits.

Com os calíveis a serem valores de primeira classe, as expressões de chamada são uma forma genérica de suportar padrões que não são comuns o suficiente para merecer a sua própria construção de linguagem dedicada, ou a sintaxe dedicada ainda não foi (ainda) introduzida por outros motivos. Alguns exemplos de métodos de biblioteca que servem essa finalidade são ApplyIf, que invoca uma operação condicional num bit clássico a ser definido; ApplyToEach, que aplica uma determinada operação a cada elemento numa matriz; e ApplyWithInputTransformation, conforme mostrado no exemplo seguinte.

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

        op(fn(input));
    }

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

Para que o compilador gere automaticamente as especializações para suportar determinados functores, normalmente requer que as chamadas operações também suportem esses functores. As duas exceções são chamadas em blocos externos de conjugações, que precisam sempre de suportar o Adjoint functor, mas nunca precisam de suportar o Controlled functor e as operações auto-adjacentes, que suportam o Adjoint functor sem impor requisitos adicionais às chamadas individuais.