javascript - 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 可以无点写,只是有些东西我没有正确看到或理解。函数可以改写吗?
解决方案
我想不出一个看起来不太复杂的无点版本。我认为你所拥有的已经很不错了。
我提出的唯一建议是将事情分开:将日志记录与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
推荐阅读
- asp.net-core - 发布到服务器时设置环境为开发
- amazon-web-services - 当我的 aws lambda 函数执行时如何选择弹性 IP
- php - MySQL JOIN 选择用户 id 和他的所有流量添加
- java - 应用程序在某些设备中未收到启动完成的意图
- c# - 从列表中删除单个项目的最快方法是什么
在订单重要的地方没有重复? - c++ - 尝试从目标文件编译时对“glfw ...”函数的未定义引用
- wordpress - 添加指向 Buddypress 个人资料选项卡二级菜单的链接
- ruby-on-rails - 如何仅由响应负责人获得 ajax 承诺?
- react-native - 如何在 Android 和 IOS 的原生反应中使用复选框?
- python - How do I reimplement the itemChange and mouseMoveEvent of a QGraphicsPixmapItem?