Ein*_*nsL 3 f# parametric-polymorphism
我想计算我的功能,其中一些最多使用三个参数.现在我正在使用下面相同的代码,其中包含三种变体.
let GetTime f (args : string) =
let sw = Stopwatch.StartNew()
f (args)
printfn "%s : %A" sw.Elapsed
Run Code Online (Sandbox Code Playgroud)
我想用这个替换三个函数.
let GetTime f ( args : 'T[]) =
let sW = Stopwatch.StartNew()
match args.Length with
| 1 -> f args.[0]
| 2 -> f (args.[0] args.[1])
printfn "%A" sW.Elapsed
()
Run Code Online (Sandbox Code Playgroud)
但是如果我使用它运行的三个函数,我会收到类型不匹配的错误.是否可以将函数作为参数发送并像这样使用它?
为什么不做这样的事情呢?
let getTime f =
let sw = Stopwatch.StartNew()
let result = f ()
printfn "%A" sw.Elapsed
result
Run Code Online (Sandbox Code Playgroud)
假设f1,f2和f3是分别取1,2,和3个参数三个功能,则可以使用getTime像这样的功能:
getTime (fun () -> f1 "foo")
getTime (fun () -> f2 "foo" "bar")
getTime (fun () -> f3 "foo" "bar" "baz")
Run Code Online (Sandbox Code Playgroud)
但是,如果您只需要在FSI中计算某些功能,则此功能已经内置:只需输入即可
> #time;;
Run Code Online (Sandbox Code Playgroud)
和时间将打开.