In F # è possibile eseguire il confronto con una firma di funzione. Voglio decorare una serie di funzioni con una funzione che misura l'esecuzione della funzione e chiama a statsd. La funzione attuale che ho è:Corrispondenza del modello in base alla firma della funzione
let WrapFunctionWithPrefix(metrics:Metric.Client.IRecorder, functionToWrap, prefix) =
let metricsIdentifier = (sprintf "%s.%s" prefix Environment.MachineName)
using (metrics.StartTimer(metricsIdentifier)) (fun metrics -> functionToWrap)
Come potete vedere sopra, il prefisso varierà, e nella nostra applicazione questo può variare per ogni definizione di funzione. Quindi, piuttosto che dover passare nel prefisso misura ogni volta che voglio fare qualcosa di simile al seguente:
let WrapFunction metrics afunc =
match afunc with
| :? (int -> int) -> WrapFunctionWithPrefix(metrics, afunc, "My function 1")
| :? (string -> string) -> WrapFunctionWithPrefix(metrics, afunc, "My function 2")
| _ -> failwith "Unknown function def"
C'è un modo di pattern matching sulla base della firma della funzione in F #?
Qualsiasi aiuto apprezzato.
Billy
Cheers, è andato giù per questa strada e ha funzionato. Leggermente più elegante! – bstack