【发布时间】:2018-03-15 08:31:30
【问题描述】:
今天刚开始使用 Ramda,试图通过更具声明性来学习/将函数式编程整合到我的代码中,但我无法弄清楚如何使用管道(或 curry?)使其更加精简只用过一次,也许我在努力。
任何人都可以解释如何减少它以使其看起来不那么混乱,以便我可以了解 FP 吗?如果我分离出每个方法并像工作示例中那样单独调用,我似乎只能做到这一点。为简洁起见,对示例进行了简化。
工作示例
const logLevels: string[] = ['log', 'info', 'debug', 'error'];
// maps logLevels into pairs: [[log: f(x)], ['info': f(x)], ...]
const toPairs = (logLevel: string) => [logLevel, debug(`${process.env.APP_NAME}:${namespace}:${logLevel}`)];
const loggers: any = R.map(toPairs, logLevels);
// Then takes the pairs and makes it an object
// Output: { log: f(x), info: f(x), debug: f(x), ...}
this.debugger = R.fromPairs(loggers);
// Example Usage:
// this.debugger.log('...');
【问题讨论】:
-
看起来你可能已经自己解决了,但以后考虑给出预期的输出和用法。第一次阅读我不清楚你想在
this.debugger上创建一堆方法 -
为什么我在这个问题上得了-1?这个问题有一个我正在研究的例子,只问如何将它从 4 条单独的线带到使用管道的东西。我已经说过问题中的示例有效,但由于我是 FP 的新手,所以我不明白如何提高效率
-
@RossMackay 我不确定你是如何误解这个问题的。我只问如何使用我的
working example(因为它已经工作了,但分为 4 个部分)并使用管道或其他 FP 方法使其不那么混乱。我认为toPairs上面的数组对示例和最后使用this.debugger就足够了,但为了清楚起见,即使示例用法是this.debugger.log(...),我已经添加了被放入@的输出987654327@ -
要清楚 -1 不是我,但我正在寻找的是您添加的示例输出。误解来自函数与
this.debugger的绑定,这与函数应该输出什么无关。
标签: node.js functional-programming ramda.js