首页 > 解决方案 > Ramda 中的简单无点函数

问题描述

我还在学习 Ramda,经常无法将看似简单的 lamda 函数转换为无点纯 Ramda 函数。这是一个简单的例子:

export const consoleTap = arg =>
  R.compose(
    R.tap,
    R.curryN(2, console[arg])
  );

export const errorTap = consoleTap("error");
export const logTap = consoleTap("log");

// example usage
R.map(logTap("Value"))([1, 2]) // Results in printing "Value 1" "Value 2"

这些功能运行良好,我什至为它们编写了测试。我只是觉得consoleTap 可以无点写,只是有些东西我没有正确看到或理解。函数可以改写吗?

标签: javascriptramda.js

解决方案


我想不出一个看起来不太复杂的无点版本。我认为你所拥有的已经很不错了。

我提出的唯一建议是将事情分开:将日志记录与tap. 您可以自己重用您的“前缀”版本的日志记录:

const logWith = (method, prefix) => curryN(2, console[method])(prefix);
const log = logWith('log', 'INFO: ');
const error = logWith('error', 'ERR: ');
log(10); // INFO: 10
error(10); // ERR: 10

并与tap

const logTap = tap(logWith('error', 'ERR: '));
logTap(10);
// ERR: 10
// => 10


推荐阅读