Oproepexpressies
Oproepexpressies vormen een belangrijk onderdeel van elke programmeertaal. Bewerkings- en functieaanroepen, net als gedeeltelijke toepassingen, kunnen overal als expressie worden gebruikt zolang de geretourneerde waarde van een geschikt type is.
Het nut van het aanroepen van bewerkingen in deze vorm ligt voornamelijk in foutopsporing. Dergelijke bewerkingen zijn een van de meest voorkomende constructies in elk Q# programma. Tegelijkertijd kunnen bewerkingen alleen worden aangeroepen vanuit andere bewerkingen en niet vanuit functies. Zie ook Qubits voor meer informatie.
Nu aanroepbare functies eersteklas waarden zijn, zijn aanroepexpressies een algemene manier om patronen te ondersteunen die niet algemeen genoeg zijn om hun eigen toegewezen taalconstructie te verdienen, of de toegewezen syntaxis is (nog) niet geïntroduceerd om andere redenen. Enkele voorbeelden van bibliotheekmethoden die dit doel dienen, zijn ApplyIf
, die een bewerking aanroept op voorwaarde dat een klassieke bit wordt ingesteld; ApplyToEach
, die een bepaalde bewerking toepast op elk element in een matrix; en ApplyWithInputTransformation
, zoals wordt weergegeven in het volgende voorbeeld.
operation ApplyWithInputTransformation<'TArg, 'TIn>(
fn : 'TIn -> 'TArg,
op : 'TArg => Unit,
input : 'TIn
) : Unit {
op(fn(input));
}
ApplyWithInputTransformation
gebruikt een functie fn
, een bewerking op
en een input
waarde als argumenten en past vervolgens de opgegeven functie toe op de invoer voordat de opgegeven bewerking wordt aangeroepen met de waarde die door de functie wordt geretourneerd.
Als u wilt dat de compiler de specialisaties automatisch genereert ter ondersteuning van bepaalde functors, vereist het meestal dat de aangeroepen bewerkingen deze functors ook ondersteunen. De twee uitzonderingen zijn aanroepen in buitenste blokken van vervoegingen, die altijd de Adjoint
functor moeten ondersteunen, maar nooit de Controlled
functor hoeven te ondersteunen, en aan zichzelf grenzende bewerkingen, die de Adjoint
functor ondersteunen zonder extra vereisten op te leggen aan de afzonderlijke aanroepen.