partial application

这个概念好像不太好翻译,有人直译为偏应用,对不懂这个概念的人有点一头雾水,不知所云,我来简单理解一下。另外已经有工程师把这个特性提交到了 tc39,说不定不久我们就能在新版谷歌浏览器使用了。

我们有一个求和函数如下:

function foo(a, b, c) { return a + b + c }

当我调用的时候,有个参数我突然不知道传什么,暂时想不传,并用 undefined 来替代。我们当然不能这么写:

foo(undefined,1,2)

所以,需要引入一个工具方法:

function partial(fn,...partialArgs){
  let args = partialArgs.slice(0);
  
  return function(...fullArguments) {
    let arg = 0;
    let args2 = args.slice(0)
    for (let i = 0; i < args.length && arg < fullArguments.length; i++) {
      if (args2[i] === undefined) {
        args2[i] = fullArguments[arg++];
        }
      }
      return fn.apply(this, args2);
  };
};

然后我们就能这么写了:

let partialedFoo = partial(foo,undefined,1,4)
partialedFoo(5) // 10
// 或者
let partialedFoo = partial(foo,undefined,1,undefined)
partialedFoo(5,5) // 11

这就是 partial application。

扩展阅读

作者: 曾小乱

喜欢写点有意思的东西

《partial application》有一个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据