7

現実世界の問題に取り組み、Java で書かれた同じコードと比較できる、完全に機能する Scala モナドの例を持っている人はいますか?

4

3 に答える 3

11

すべてのコレクションはモナド (これは一般的なステートメントであり、Scala 固有のものではありません) であるか、どの程度厳密にしたいかによって「モナドを持っています」。Scala にはOptionモナドもあり、左右の射影Eitherも同様です。それらの for-comprehension を見るときはいつでも、それらのモナドの側面が働いているのを見ることができます。

Scala におけるモナドのより微妙な例は、パーサー コンビネーターです。演算子は、文法でよりよく見える同義語の背後にあるモナド操作を隠すため、より微妙です。

于 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 

特に、私よりもはるかに賢い誰かがすでにhttp://functionaljava.org/examples/1.5/#Option.bindを行っていたので、私はJavaバージョンで時間を無駄にするつもりはありません。リンクの例は、基本的optionAddに、無限に簡潔な方法で行うことを行っています。

于 2013-02-26T18:01:22.763 に答える
2

http://jazzy.id.au/default/2012/11/02/scaling_scala_vs_java.htmlを参照してください。

たとえば、モナドを使用した 4 つのクライアントへの非同期呼び出し:

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

Futu はモナドであり、理解のために非同期コードを作成するために使用できます

Javaでは... Java 8でMonadsの待機を開始します

于 2013-02-26T19:42:08.953 に答える