答案 0 :(得分:21)
闭包,正如使用的词,只是函数(或代码块,如果你愿意),你可以像对待一段数据一样处理并传递给其他函数等。(“关闭”位是无论你最终在哪里调用它,它的行为就像你在最初定义的地方调用它一样。 monad(大致)更像是一个上下文,其中函数可以顺序链接在一起,并控制数据从一个函数传递到下一个函数的方式。
答案 1 :(得分:5)
它们完全不同,尽管monads通常会使用闭包捕获逻辑。
就个人而言,我会尝试在闭包的定义(基本上是一个逻辑,它也捕获其环境,即局部变量等)上变得坚实,然后再担心monad。他们可以稍后来:)
关于Stack Overflow上的闭包有各种各样的问题 - 帮助你的最好的一个问题取决于你正在做什么平台。例如,有:
就我个人而言,我只是刚刚开始“修复”monad(感谢我正在帮助的书)。有一天,当我觉得我对它们的理解得很好时,我会写一篇关于它们的文章:)
答案 2 :(得分:1)
“闭包”是一个对象,包括1)一个函数,以及2)它构造的自由变量的值。
“monad”是一类可以以某种方式组合的函数,即通过使用关联的 bind 和 return 高阶函数运算符来生成其他功能。
答案 3 :(得分:0)
我认为monad比闭包更复杂,因为闭包只是代码块,从定义的角度来记住某些东西,monad是用于“扭曲”通常的函数组合操作的构造。