Scala Monad - 完整的例子

时间:2013-02-26 17:35:54

标签: scala

有没有人有一个Scala monad的完整工作示例来解决现实世界的问题并且与用Java编写的相同代码进行比较?

3 个答案:

答案 0 :(得分:11)

所有集合都是monad(这是一般声明,而不是Scala特定的集合),或者“monad”取决于你想要的严格程度。 Scala也有Option作为monad,以及Either的左右投影。每当你看到他们的理解时,你就可以看到他们的monadic方面。

Scala中monad的一个更微妙的例子是解析器组合器。它更加微妙,因为运算符隐藏了在语法中看起来更好的同义词背后的monadic操作。

答案 1 :(得分:9)

def optionAdd(x:Option[Int], y:Option[Int]):Option[Int] = 
  for(xx <- x; yy <- y) yield xx+yy 

我不敢在Java版本上浪费时间,特别是因为比我聪明的人已经做过http://functionaljava.org/examples/1.5/#Option.bind。链接中的示例基本上以optionAdd无限简洁的方式执行。{/ p>

答案 2 :(得分:2)

请参阅http://jazzy.id.au/default/2012/11/02/scaling_scala_vs_java.html

例如使用monad到四个客户端的异步调用:

for {
  user <- getUserById(id)
  orders <- getOrdersForUser(user.email)
  products <- getProductsForOrders(orders)
  stock <- getStockForProducts(products)
} yield stock

期货是monadic,因为理解可以用来组成异步代码

在java中......开始等待Monads with Java 8