在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#函數簽名?
任何幫助表示讚賞。
比利
乾杯,順着這條路走下去了。稍微優雅! – bstack