Espressioni di chiamata
Le espressioni di chiamata sono una parte importante di qualsiasi linguaggio di programmazione. Le chiamate di operazione e funzione, molto simili a applicazioni parziali, possono essere usate come espressione ovunque, purché il valore restituito sia di un tipo appropriato.
L'utilità delle operazioni di chiamata in questo formato si trova principalmente nel debug e tali chiamate di operazione sono uno dei costrutti più comuni in qualsiasi Q# programma. Allo stesso tempo, le operazioni possono essere chiamate solo da altre operazioni e non dall'interno di funzioni. Per altre informazioni, vedere anche Qubits.
Con i chiamabili che sono valori di prima classe, le espressioni di chiamata sono un modo generico di supportare i modelli che non sono abbastanza comuni per meritare il proprio costrutto di linguaggio dedicato o la sintassi dedicata non è ancora stata introdotta per altri motivi. Alcuni esempi di metodi di libreria che servono a tale scopo sono ApplyIf
, che richiama un'operazione condizionale su un bit classico impostato; ApplyToEach
, che applica un'operazione specificata a ogni elemento in una matrice e , ApplyWithInputTransformation
come illustrato nell'esempio seguente.
operation ApplyWithInputTransformation<'TArg, 'TIn>(
fn : 'TIn -> 'TArg,
op : 'TArg => Unit,
input : 'TIn
) : Unit {
op(fn(input));
}
ApplyWithInputTransformation
accetta una funzione , un'operazione e un input
valore come argomenti e quindi applica la funzione fn
specificata all'input prima di richiamare l'operazione op
specificata con il valore restituito dalla funzione.
Affinché il compilatore generi automaticamente le specializzazioni per supportare specifici functor, in genere richiede che le operazioni chiamate supportino anche tali functor. Le due eccezioni sono chiamate in blocchi esterni dijugazioni, che devono sempre supportare il functor, ma non devono mai supportare le Controlled
operazioni functor e auto-adiacenti, che supportano il Adjoint
Adjoint
functor senza imporre requisiti aggiuntivi alle singole chiamate.