呼叫委派与部分功能应用

时间:2014-03-14 15:47:35

标签: language-agnostic functional-programming

我需要在代码中的许多地方调用一个带有两个参数的函数。

hash(itemToHash, algorithm) { ... }

我不想在每个函数调用中传递algorithm参数。

我可以创建一个带有一个参数的函数来委托调用:

md5hash(itemToHash) {
   hash(itemToHash, 'md5')
}

或者我可以使用部分应用程序来绑定algorithm参数。

我想要的方法是创建一个更高阶函数,返回部分应用的哈希函数,我会从代码中的许多地方调用这个更高阶函数来获得单个参数函数。

但是,这不是不必要的复杂吗?与简单的呼叫委派相比,我认为第二种方法没有任何好处。

1 个答案:

答案 0 :(得分:1)

假设你有一些函数partial,它将参数部分地应用于其他函数。您不需要在代码中的任何地方调用此partial函数,以便使用部分应用的函数。

实际上你只需要调用一次。要生成部分应用的函数,然后将其绑定到名称。

md5Hash := partialRight(hash, 'md5')

至于我的理解甚至

md5Hash(itemToHash) {
    hash(itemToHash, 'md5')
}

是某种部分应用。虽然是静态的。 partial函数的好处是能够在运行时创建部分应用的函数。