使用2个序列将Seq.map应用于采用2个参数的方法

cod*_*zen 1 f# partial-application seq

我正在写一个快速的DB perf测试,并选择F#所以我可以得到更多练习.

我创建了一个measureSelectTimes具有签名的方法Guid list * Guid list -> IDbCommand -> TimeSpan * TimeSpan.

然后,我称之为:

let runTests () =
    let sqlCeConn : IDbConnection = initSqlCe() :> IDbConnection
    let sqlServerConn : IDbConnection = initSqlServer() :> IDbConnection
    let dbsToTest = [ sqlCeConn; sqlServerConn ]
    let cmds : seq<IDbCommand> = dbsToTest |> Seq.map initSchema
    let ids : seq<Guid list * Guid list> = cmds |> Seq.map loadData
    let input = Seq.zip ids cmds
    let results = input |> Seq.map (fun i -> measureSelectTimes (fst i) (snd i))
    // ...
Run Code Online (Sandbox Code Playgroud)

我明确注释了类型以澄清.

我无法弄清楚的是如何在measureSelectTimes没有lambda的情况下打电话.我想像这样部分应用ids它:ids |> Seq.map measureSelectTimes但是后来我不知道如何处理结果部分应用的函数然后映射到cmds.这是什么语法?

kvb*_*kvb 8

你可以使用Seq.map2:

Seq.map2 measureSelectTimes ids cmds
Run Code Online (Sandbox Code Playgroud)

要么

(ids, cmds) ||> Seq.map2 measureSelectTimes
Run Code Online (Sandbox Code Playgroud)

  • 教我一个新的操作员+1 - "||>"来自哪里!?它不在[MSDN](http://msdn.microsoft.com/en-us/library/dd233228.aspx)页面上. (3认同)