gpt4 book ai didi

clojure - 当你想要在 Clojure 中同时产生副作用和保留值(value)时,该使用什么函数?

转载 作者:行者123 更新时间:2023-12-02 00:14:50 25 4
gpt4 key购买 nike

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

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

(doall (map ..)) 是我唯一的选择吗?有更惯用的方法吗?

最佳答案

没有。 (doall (map ..))不是您唯一的选择:mapv并不懒惰,所以它有效地做到了 (doall (map ..)) ,但在一次操作中。

使用map都不是很好。或mapv使用会产生副作用的映射函数。相反,尝试使用 doseq ,这清楚地表明将会发生副作用。正如您所指出的,这正是您问题的关键, doseq 的问题是返回结果不会像 map 那样按顺序收集在一起。或mapv .

如果您不想要惰性序列,那么首先尝试不要生成它,而不是生成它然后强制它像您当前正在做的那样实现。因此我们应该排除使用 map .

大多数不需要懒惰的情况都可以通过使用mapv来涵盖。当您的映射函数没有副作用时,或 doseq当它是时,但不返回结果。

如果您的映射函数既产生结果,又产生副作用,并且您希望将这些结果收集在一起,那么最好的选择是使用 mapv一个映射函数,其名称以 ! 结尾,显然会产生副作用。 。虽然这不是 mapv 的一个很好的用途。 ,至少!清楚地突出了正在发生的事情。

关于clojure - 当你想要在 Clojure 中同时产生副作用和保留值(value)时,该使用什么函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com