7

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

4

3 回答 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 回答