有没有人有一个Scala monad的完整工作示例来解决现实世界的问题并且与用Java编写的相同代码进行比较?
答案 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