首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Monads和Decorator模式

Monads和Decorator模式
EN

Stack Overflow用户
提问于 2012-09-04 16:40:26
回答 3查看 1.5K关注 0票数 9

我是函数式编程的新手。在学习Monads的教程时,我把它看作是OOP中的Decorator pattern的类比。我说的对吗?或者有没有类似Monad的设计模式?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-04 21:17:08

Monad绝对不是装饰者。通常没有一个标准的OOP模式是monads的直接类比。尽管您可以在OOP中很好地实现monads,但请参见:

  • http://logicaltypes.blogspot.sg/2011/09/monads-in-java.html

我所知道的最好的基于Clojure的monad教程是Brian Marick的这个视频系列:

我建议从头到尾看一遍--这是一个非常好的介绍,有很多例子。

票数 7
EN

Stack Overflow用户

发布于 2012-09-04 21:28:46

您可以开始将monad看作是“可覆盖的分号”,这是由于Haskell中已知的语法糖分。

一般来说,这确实意味着您可以使用相同的控制结构(代码块)来做不同的事情,这取决于当前使用的monad

Haskell中的qick示例

代码语言:javascript
复制
import Data.Maybe
import Data.List


funcMaybe x = do
  z <- x
  return $ z * z

funcList x = do
  z <- x
  return $ z * z

runMaybe = funcMaybe ( Just 5 )

runList = funcList [ 5, 6 ]

在GHCI中执行时,它将提示

代码语言:javascript
复制
ghci> runMaybe 
Just 25
ghci> runList 
[25, 36]

如您所见,相同的代码块在一种情况下会产生不同的结果列表,在另一种情况下可能会包装成适当的数据结构

票数 2
EN

Stack Overflow用户

发布于 2012-09-04 17:31:48

Monads就像一个function composition on steroids,在面向对象的世界中没有类似的强大概念。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12259758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档