現実世界の問題に取り組み、Java で書かれた同じコードと比較できる、完全に機能する Scala モナドの例を持っている人はいますか?
3 に答える
すべてのコレクションはモナド (これは一般的なステートメントであり、Scala 固有のものではありません) であるか、どの程度厳密にしたいかによって「モナドを持っています」。Scala にはOption
モナドもあり、左右の射影Either
も同様です。それらの for-comprehension を見るときはいつでも、それらのモナドの側面が働いているのを見ることができます。
Scala におけるモナドのより微妙な例は、パーサー コンビネーターです。演算子は、文法でよりよく見える同義語の背後にあるモナド操作を隠すため、より微妙です。
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
に、無限に簡潔な方法で行うことを行っています。
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の待機を開始します