Clojure 中的 mapcat 和 Scala 中的 flatMap 在操作上有什么区别?

2024-01-11

我理解相当于flatMap在 Scala 中是mapcat http://clojuredocs.org/clojure_core/clojure.core/mapcat在 Clojure 中。

我有一个预感mapcat在 Clojure 中仅适用于序列,这与flatMapScala 更灵活。

我的问题是 - 之间有什么区别mapcat在 Clojure 和flatMap在 Scala 中,它们的操作是什么?

假设:

  • 我知道 Scala 有一个丰富的类型系统,而 Clojure 有可选的类型 - 我有兴趣知道这是否是 mapcat 接受的参数的限制,使其只有一个子集flatMap的功能。

我对 Scala 了解一点,但在我看来,flatMap 是 monad 中的 Scala 绑定函数,而 mapcat 是 Clojure 中序列 monad 的绑定函数的可能实现。所以它们对于序列来说是相同的。

但是 Scala 有一个用于 Futures 的 flatMap 函数:它需要一个 future 和一个映射函数,并返回一个 future,该 future 将在输入 future 完成后完成。这个操作在Clojure中看起来并不是简单的mapcat。也可以这样实现

(defn flat-map [f mv] (mapcat (fn [v] (future (f @v))) mv))

所以不行。它们并不相同,就其操作内容而言也不相同。在 Scala 中,flatMap 是不同函数的通用名称,例如 Futures 的 flatMap 坐标输入和输出 future。 Clojure 中的简单 mapcat 不起作用,因为它不会返回 future。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure 中的 mapcat 和 Scala 中的 flatMap 在操作上有什么区别? 的相关文章

随机推荐