热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

当您想要Clojure中的副作用和保留值时,使用什么功能?

如何解决《当您想要Clojure中的副作用和保留值时,使用什么功能?》经验,为你挑选了1个好方法。

人们说避免使用map顺序执行副作用,这是有道理的.

但在现实世界中,我发现自己需要保留结果并map急切地评估,即插入数据库并返回记录时.

这是(doall (map ..))我唯一的选择吗?有没有比较惯用的方法呢?



1> Chris Murphy..:

(doall (map ..))是不是你唯一的选择:mapv是不是懒惰,所以它确实有效(doall (map ..)),但在一个操作.

这是不是很大为使用mapmapv使用地图功能产生副作用.而是尝试使用doseq,这清楚地表明将发生副作用.正如你所指出的,这就是问题的症结所在,问题doseq在于返回结果不是按顺序聚集在一起,因为它们是map或者mapv.

如果你不想要一个懒惰的序列,那么首先尝试不生成它,而不是生成它,然后强制它像你现在一样实现.因此我们应该排除使用map.

大多数不需要懒惰的情况可以通过mapv地图功能没有副作用时使用,或者doseq在没有返回结果的情况下使用.

如果你的地图功能都产生了结果,并且是副作用,并且你希望将这些结果收集在一起,那么你最好的选择就是使用mapv一个名为明显产生副作用的地图功能,通过名字结束在!.虽然这不是很好用mapv,但至少!清楚地突出了正在发生的事情.


@LoveProgramming更新和提取都是副作用(任何类型的I/O都会排除引用透明性),因此在两个阶段中执行它不会保留任何纯度.
推荐阅读
author-avatar
zcr2016
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有