11

我有点困惑阅读两者之间的定义。它们实际上可以在定义方面相交吗?还是我完全迷路了?谢谢。

4

4 回答 4

21

闭包,正如这个词所使用的那样,只是函数(或代码块,如果你喜欢的话),你可以像对待一段数据一样对待并传递给其他函数等(“封闭”位是指无论你在哪里最终调用它,它的行为就像你在它最初定义的地方调用它一样)。monad(大致)更像是一个上下文,其中函数可以按顺序链接在一起,并控制数据如何从一个函数传递到下一个函数。

于 2009-04-26T12:33:23.167 回答
5

它们完全不同,尽管 monad 通常会使用闭包来捕获逻辑。

就我个人而言,在担心单子之前,我会尝试对闭包的定义(本质上是一段也捕获其环境的逻辑,即局部变量等)进行深入了解。他们可以稍后来:)

关于 Stack Overflow 上的闭包有各种各样的问题——最能帮助您的问题取决于您正在使用的平台。例如,有:

就我个人而言,我才刚刚开始“了解”单子(感谢我正在帮助的书)。有一天我会抽空写一篇关于它们的文章,当我觉得我足够了解它们时:)

于 2009-04-26T12:04:06.280 回答
1

“闭包”是一个对象,包括 1) 一个函数,以及 2) 构造它的自由变量的值。

“monad”是一类可以以某种方式组合的函数,即通过使用关联的绑定返回高阶函数运算符,以产生其他函数。

于 2009-06-03T03:42:49.230 回答
0

我认为 monad 比闭包稍微复杂一些,因为闭包只是从定义的角度记住某些内容的代码块,而 monad 是“扭曲”通常的函数组合操作的构造。

于 2009-08-29T15:00:44.390 回答