基于函数签名的模式匹配

bst*_*ack 6 f# functional-programming statsd

在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)
Run Code Online (Sandbox Code Playgroud)

如您所见,前缀会有所不同,在我们的应用程序中,这将根据函数定义而有所不同.因此,每次我想要执行以下操作时,不必传递度量前缀:

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"
Run Code Online (Sandbox Code Playgroud)

基于F#中的函数签名是否有任何模式匹配方式?

任何帮助赞赏.

比利

Dan*_*ian 7

是否有可能将案件宣布为DU?

type MyFunctions =
| Intish of int -> int
| Stringish of string -> string
Run Code Online (Sandbox Code Playgroud)