首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有绑定的分部函数

带有绑定的分部函数
EN

Stack Overflow用户
提问于 2018-06-06 04:10:21
回答 2查看 173关注 0票数 4

所以最近我发现,你可以使用bind对js进行部分函数/货币转换。例如:

代码语言:javascript
复制
const foo = (a, b, c) => (a + (b / c))
foo.bind(null, 1, 2) //gives me (c) => (1 + (2 / c))

然而,只有当你想要加工的部分是有序的时,这才能起作用。如果我想使用bind实现以下目标呢?

代码语言:javascript
复制
(b) => (1 + (b / 2))

尝试了各种解决方案,例如:

代码语言:javascript
复制
foo.bind(null, 1, null, 2)

有什么想法吗?有没有可能用vanilla es6来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 04:17:46

您可以使用包装器对参数进行重新排序。

代码语言:javascript
复制
const
    foo = (a, b, c) => a + b / c,
    acb = (a, c, b) => foo(a, b, c);

console.log(acb.bind(null, 1, 2)(5));

票数 3
EN

Stack Overflow用户

发布于 2018-06-06 04:30:44

目前,我认为有两种方法可以实现这一点(除了来自@NinaSholz的包装器,这是非常好的):

1.使用合并两个参数数组的curry函数:

代码语言:javascript
复制
const foo = (a, b, c) => a + b / c;

function curry(fn, ...args) {
  return function(...newArgs) {
    const finalArgs = args.map(arg => arg || newArgs.pop());
    return fn(...finalArgs);
  };
}

const curriedFoo = curry(foo, 1, null, 2);

console.log(curriedFoo(4)) // Should print 1 + 4 / 2 = 3

在这里,我们只是发送nullundefined,而不是要跳过的参数,在第二个调用中,我们按顺序发送这些参数

2.对命名参数使用对象

代码语言:javascript
复制
const foo = ({a, b, c}) => a + b / c;

function curry(fn, args) {
  return (newArgs) => fn({ ...args,
    ...newArgs
  });
}

const curriedFoo = curry(foo, {
  a: 1,
  c: 2
});

console.log(curriedFoo({
  b: 4
}));

这里我们利用函数签名中的...(扩展)运算符和对象语法来合并两个参数对象;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档