【问题标题】:Exposing Partially Applied Functions To Application将部分应用的函数暴露给应用程序
【发布时间】:2018-01-31 09:17:17
【问题描述】:

我正在开发一个包含许多验证器的验证库。每个验证器都带有一条消息作为第一个参数,后跟任何配置值。

库的用户可以传入消息函数的映射,该映射将由库应用于验证器。

const configuredValidators = Lib.configure(messages);

如果在没有此配置步骤的情况下使用这些验证器,则可以将它们导入到需要它们的任何文件中:

import { exampleValidator } from 'lib'

但是,通过预先配置验证器,库的用户现在需要将这些验证器传递给需要它们的任何函数。如果这些函数距离配置点还有很长的路要走,那么现在中间的每个函数都需要添加一个参数以通过配置的验证器。

当采用 OO 方法时,该问题有多种解决方案,但功能解决方案是什么?如何使这些部分应用的验证器在整个应用程序中可用,而无需用户混淆许多其他函数的签名?

我知道从函数内部访问外部变量会引发纯度问题,但我想我正在寻找导入的便利性,但函数的值在运行时部分应用。

注意:就本问题而言,假设图书馆的用户将采用功能性方法。

【问题讨论】:

  • "...意味着中间的每个函数现在都需要添加一个参数以通过配置的验证器..." 您正在谈论的函数有图书馆用户的功能,对吧?不是图书馆的?
  • 我可能无法完全理解您的问题,但据我了解,您需要requirejs.org 吗?
  • @T.J.Crowder 是的。我会澄清的。

标签: javascript configuration functional-programming currying partial-application


【解决方案1】:

我不认为这是你的问题。 :-) 您的用户可以使用导出已配置验证器的模块来解决此问题:

export const configuredValidators = Lib.configure(messages); // Or similar

然后他们只是从该模块导入,而不是直接从您的库中导入验证器。

【讨论】:

  • ...假设我是正确的in this comment
  • 我的大脑一直把我带到各种疯狂的地方,但不是最明显的地方。谢谢。
猜你喜欢
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
相关资源
最近更新 更多