【发布时间】:2017-09-11 23:14:56
【问题描述】:
我正在用一个 react-project 玩 Ramda 和 FP。我想更多地学习用 FP 编写干净的代码,所以如果存在更干净的方式,我会过度考虑每一行。 现在我遇到了这个问题,但找不到让我开心的解决方案:
const mapErrorToErrorNode = (onUnknownError, transformUnknownError, getKnownError) => R.pipe(
R.prop('error'),
handleErrorIfExists(onUnknownError, transformUnknownError, getKnownError),
R.assoc('errorNode', R.__, {}),
);
我必须将所有参数作为参数传递给内部函数。当然,这可行,但它并不是很好。如果我要更改内部函数的签名,我还必须在此函数调用中更改它。一种解决方案也是:
const mapErrorToErrorNode = (...args) => R.pipe(
R.prop('error'),
R.apply(handleErrorIfExists, args),
R.assoc('errorNode', R.__, {}),
);
我错过了什么还是这是最好的方法?
(要了解我想要做的更多上下文,you can look at this Ramda REPL。)
(我已经看过How do I pass in multiple parameters into a Ramda compose chain?,但我认为这不适用于我的问题,或者我只是不明白)
【问题讨论】:
-
你的函数没有返回值,所以它不起作用。这里也不清楚您要做什么。您正在不必要地使用函数来替换控制流结构,而这样做却一无所获,并使用自定义变体复制基本的 Ramda 函数,如
prop。 -
对不起,我错了。你所需要的只是 monads 的函数实例:
chain = f => g => x => g(f(x)) (x); of = x => y => x; ask = x => x。然后,您可以通过链接它们来创建共享参数的读取器函数。我知道函数是 Ramda 中的 monad,因为ask只是id你应该可以用 Ramda 来做到这一点。
标签: javascript functional-programming ramda.js