首页 > 解决方案 > 如何为 curried 函数添加额外的级别?

问题描述

代替:

const fn = (ctx, a, ...rest) => {};
const fnCurried = (ctx) => (b) => (...rest) => fn(ctx, b, ...rest);

someFn("something", fnCurried(ctx));

我希望能够在顶层调用“fn”,所以我想也许将上下文存储在另一种方法中会有所帮助,我不知道该怎么做

const fnCurried = createCtx(ctx)
someFn("something", fnCurried(fn))

标签: javascriptfunctioncurrying

解决方案


在您的第一个示例中,someFn将第二个参数作为以下形式的函数:

(b) => (...rest) => fn(ctx, b, ...rest);

在您的第二个示例中,您希望保持这种行为,这意味着调用fnCurried(fn)必须返回上述函数。我们可以这样写:

const fnCurried = (fn) => (b) => (...rest) => fn(ctx, b, ...rest);

但是,如果我们只是使用它,那么我们就没有在任何地方提供上下文。这就是我们可以调用另一个函数的地方createCtx(),它将为我们返回上面的 fnCurried 函数,同时也关闭提供的ctx

const createCtx = ctx => fn => b => (...rest) => fn(ctx, b, ...rest);
const fnCurried = createCtx(ctx);
someFn("something", fnCurried(fn));

createCtx函数允许我们传入上下文,然后为我们返回,一旦调用fnCurried就可以传入someFn


推荐阅读