javascript - 如何为 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))
解决方案
在您的第一个示例中,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
推荐阅读
- c# - 试图在我的游戏中实现缩放功能,但它不会取消缩放
- excel - 如何同时使用 `FileSystemObject.CreateFolder` 创建文件夹和子文件夹
- html - 填充动态 flexbox 或网格中剩余的空白行空间
- python - 如何从 mssql 表中加载列表?
- java - Spring-Boot:不尊重 Jackson 序列化配置
- javascript - Carousell 不加载有效果的图片
- node.js - React.js + Node.js - 从服务器响应时出错。“UnhandledPromiseRejectionWarning:错误:请求失败,状态码 304”
- jenkins - 您如何从 Jenkins 另一项工作的最后 2 个稳定版本中获取工件?
- gpu - 使用 CPU 工作人员进行数据处理,并使用带有 dask 的 GPU 工作人员训练 xgboost
- adfs - 使用 ADFS 作为 SAML IdP 的 Gigya - 如何将组添加到 Gigya 帐户