有没有人有一个完整的 Scala monad 示例来解决现实世界的问题并与用 Java 编写的相同代码进行比较?
问问题
5450 次
3 回答
11
所有的集合都是单子(这是一个一般性的声明,而不是特定于 Scala 的声明),或者“有单子”,这取决于你想要对它有多严格。Scala 也有Option
一个 monad,以及左右投影Either
。每当你看到他们的理解时,你就可以看到他们的一元方面在起作用。
Scala 中一个更微妙的 monad 示例是解析器组合器。它更加微妙,因为运算符将一元操作隐藏在语法中看起来更好的同义词后面。
于 2013-02-26T18:00:45.027 回答
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
是以无限简洁的方式完成的。
于 2013-02-26T18:01:22.763 回答
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
Futues 是一元的,for 推导可用于编写异步代码
在java中...开始等待Java 8的Monads
于 2013-02-26T19:42:08.953 回答