Wyrażenia wywołań
Wyrażenia wywołań są ważną częścią dowolnego języka programowania. Wywołania operacji i funkcji, podobnie jak aplikacje częściowe, mogą być używane jako wyrażenie w dowolnym miejscu, o ile zwracana wartość jest odpowiednim typem.
Użyteczność wywoływania operacji w tym formularzu polega głównie na debugowaniu, a takie wywołania operacji są jedną z najbardziej typowych konstrukcji w dowolnym Q# programie. Jednocześnie operacje mogą być wywoływane tylko z poziomu innych operacji, a nie z poziomu funkcji. Aby uzyskać więcej informacji, zobacz też Kubity.
Przy wywoływaniu wartości pierwszej klasy wyrażenia wywołań są ogólnym sposobem obsługi wzorców, które nie są wystarczająco powszechne, aby zasługiować na własną dedykowaną konstrukcję języka lub dedykowana składnia nie została jeszcze wprowadzona z innych powodów. Niektóre przykłady metod biblioteki, które służą do tego celu, to ApplyIf
, która wywołuje operację warunkową na zestaw bitów klasycznych; ApplyToEach
, która stosuje daną operację do każdego elementu w tablicy; i ApplyWithInputTransformation
, jak pokazano w poniższym przykładzie.
operation ApplyWithInputTransformation<'TArg, 'TIn>(
fn : 'TIn -> 'TArg,
op : 'TArg => Unit,
input : 'TIn
) : Unit {
op(fn(input));
}
ApplyWithInputTransformation
pobiera funkcję fn
, operację op
i input
wartość jako argumenty, a następnie stosuje daną funkcję do danych wejściowych przed wywołaniem danej operacji z wartością zwróconą z funkcji.
W przypadku kompilatora automatycznego generowania specjalizacji w celu obsługi określonych funktorów zwykle wymagane jest, aby wywoływane operacje obsługiwały te funktory. Dwa wyjątki to wywołania w zewnętrznych blokach sprzężeń, które zawsze muszą obsługiwać funktor, ale nigdy nie muszą obsługiwać Adjoint
Controlled
funktora i operacji samozałączających, które obsługują Adjoint
functor bez nakładania żadnych dodatkowych wymagań na poszczególne wywołania.