monad和闭包之间有什么区别?

时间:2009-04-26 11:57:55

标签: closures monads

我很难读两者之间的定义。它们实际上可以在定义方面相交吗?还是我完全失去了?感谢。

4 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:5)

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

就个人而言,我会尝试在闭包的定义(基本上是一个逻辑,它也捕获其环境,即局部变量等)上变得坚实,然后再担心monad。他们可以稍后来:)

关于Stack Overflow上的闭包有各种各样的问题 - 帮助你的最好的一个问题取决于你正在做什么平台。例如,有:

就我个人而言,我只是刚刚开始“修复”monad(感谢我正在帮助的书)。有一天,当我觉得我对它们的理解得很好时,我会写一篇关于它们的文章:)

答案 2 :(得分:1)

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

“monad”是一类可以以某种方式组合的函数,即通过使用关联的 bind return 高阶函数运算符来生成其他功能。

答案 3 :(得分:0)

我认为monad比闭包更复杂,因为闭包只是代码块,从定义的角度来记住某些东西,monad是用于“扭曲”通常的函数组合操作的构造。