【发布时间】:2015-04-14 12:57:32
【问题描述】:
在 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#中有没有基于函数签名的模式匹配方式?
任何帮助表示赞赏。
比利
【问题讨论】:
标签: f# functional-programming statsd