Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aufrufausdrücke sind ein wichtiger Bestandteil jeder Programmiersprache. Vorgangs- und Funktionsaufrufe, ähnlich wie Partielle Anwendungen, können an beliebiger Stelle als Ausdruck verwendet werden, solange der zurückgegebene Wert einen geeigneten Typ aufweist.
Die Nützlichkeit von Aufrufvorgängen in dieser Form liegt in erster Linie im Debuggen, und solche Vorgangsaufrufe sind eines der gängigsten Konstrukte in jedem Q# Programm. Gleichzeitig können Vorgänge nur innerhalb anderer Vorgänge und nicht innerhalb von Funktionen aufgerufen werden. Weitere Informationen finden Sie auch Qubits.
Wenn aufrufbare Werte erstklassige Werte sind, sind Aufrufausdrücke eine generische Methode zur Unterstützung von Mustern, die nicht häufig genug sind, um ihr eigenes dediziertes Sprachkonstrukt zu verdienen, oder dedizierte Syntax wurde (noch) aus anderen Gründen nicht eingeführt. Einige Beispiele für Bibliotheksmethoden, die diesen Zweck erfüllen, sind ApplyIf, wodurch eine Operation aufgerufen wird, die auf ein klassisches Bit basiert; ApplyToEach, die einen bestimmten Vorgang auf jedes Element in einem Array anwendet; und ApplyWithInputTransformation, wie im folgenden Beispiel gezeigt.
operation ApplyWithInputTransformation<'TArg, 'TIn>(
fn : 'TIn -> 'TArg,
op : 'TArg => Unit,
input : 'TIn
) : Unit {
op(fn(input));
}
ApplyWithInputTransformation übernimmt eine Funktion fn, einen Vorgang opund einen input Wert als Argumente und wendet dann die angegebene Funktion auf die Eingabe an, bevor sie den angegebenen Vorgang mit dem von der Funktion zurückgegebenen Wert aufruft.
Damit der Compiler die Spezialisierungen automatisch generieren kann, um bestimmte Functorszu unterstützen, ist es in der Regel erforderlich, dass auch die aufgerufenen Vorgänge diese Functors unterstützen. Die beiden Ausnahmen sind Aufrufe in äußeren Blöcken von Konjugationen, die immer den Adjoint Functor unterstützen müssen, aber nie die Controlled Functor unterstützen müssen, und selbst angrenzende Vorgänge, die den Adjoint Functor unterstützen, ohne zusätzliche Anforderungen an die einzelnen Anrufe zu erzwingen.