В F # вы можете сопоставить шаблон сигнатуры функции. Я хочу украсить ряд функций функцией, которая измеряет выполнение функции и вызывает statsd. Текущая функция у меня есть:
let WrapFunctionWithPrefix(metrics:Metric.Client.IRecorder, functionToWrap, prefix) =
let metricsIdentifier = (sprintf "%s.%s" prefix Environment.MachineName)
using (metrics.StartTimer(metricsIdentifier)) ( fun metrics -> functionToWrap)
Как вы можете видеть выше, префикс будет меняться, и в нашем приложении он будет зависеть от определения функции. Поэтому вместо того, чтобы передавать префикс меры каждый раз, когда я хочу сделать что-то вроде следующего:
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"
Есть ли способ сопоставления с образцом на основе сигнатуры функции в F#?
Любая помощь приветствуется.
Билли