如何在F#中封装“所有参数”的概念?

时间:2013-02-26 12:37:21

标签: f#

在F#中,我需要做这样的事情:

let price k s t r v =
  let d1 = d1 k s t r v
... and so on

在将所有参数传递给函数时,我已经厌倦了列出所有参数。除了将参数转换为参数对象(我不能做的事情)之外,有没有办法对参数进行分组?我在考虑像

这样的东西
let price (k s t r v as foo) =
  let d1 = d1 foo

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:5)

您可以通过更高阶的函数有效地将您的参数(称为w, x, y, z)一起批处理

let batchedArgs f = f w x y z

现在batchedArgs是对原始函数参数的闭包。你只需要传递另一个带有相同数量/类型参数的函数,它们就会被应用。

// other functions which you wish to pass the args to
let sub1 w x y z = 42
let sub2 w x y z = true

// main routine
let doStuff w x y z =
    // one-time declaration of batching function is
    // the only time you need to list out the arguments
    let batchedArgs f = f w x y z

    // from then on, invoke like this
    batchedArgs sub1
    // or like this, which looks more like a traditional function call
    sub2 |> batchedArgs