【问题标题】:Apply list of functions to maybe value in Javascript将函数列表应用于 Javascript 中的可能值
【发布时间】:2017-05-01 09:31:37
【问题描述】:

我将ramda-fantasy 用于单子。我在maybe 中有一个字符串,还有一些函数将对字符串执行正则表达式匹配并返回Maybe String

我如何映射可能以应用所有函数并连接结果?

我有

const fieldRetrievers = [ 
  getAddress,
  getName,
  getPhone, 
]

const text = Maybe.of("a text")

// I want to define
// List (String -> Maybe String) -> Maybe String -> Maybe String
function getInfo(retrievers, maybeText) {...}

我该怎么做?

【问题讨论】:

  • 你想从字符串的地址部分的名字部分得到电话吗?

标签: javascript functional-programming ramda.js ramda-fantasy


【解决方案1】:

您正在寻找composeK,它是一元结构上的函数组合(“kleisli 箭头”)。

基本上,您生成的函数应该重复chain 到输入:

text.chain(getAddress).chain(getName).chain(getPhone)

您可以在函数数组上使用reduce 来实现:

R.reduce((m, f) => m.chain(f), text, fieldRetrievers)

所以你会写

const getInfo = R.flip(R.reduce(R.flip(R.chain)))

【讨论】:

  • 不错。但如果其中一个函数返回Nothing,则整个结果将是Nothing。我想忽略所有Nothings。
  • 什么意思,忽略?如果不是Nothing,你还能返回什么?请在您的问题中提供一些示例函数以及示例输入和预期输出。
  • 想象一下我有字符串"Name: John | Address: Apple Street"。在此示例中,getName 将返回 Just "John",getAddress 将返回 Just "Apple Street",getPhone 将返回 Nothing。我的目标是针对原始字符串运行所有这些函数并连接结果,忽略Nothings。在我给出的示例中,所需的输出是"John, Apple Street"。有没有一种简洁的方法来做到这一点?
  • 请把这个例子放在你的问题中,我会发布另一个答案。
猜你喜欢
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 2021-07-28
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多