ฉันกำลังพยายามเขียน monads ใน Scala โดยทำการร้องขอไปยังเซิร์ฟเวอร์ นี่คือข้อมูลโค้ดที่ฉันใช้ ฉันพยายามไม่ใช้ flatmap มากที่สุดเท่าที่จะเป็นไปได้ใช้เพื่อความเข้าใจเท่านั้น มีความคิดอะไรบ้าง? ฉันรู้จักใช้ Monad Transformers แต่ฉันไม่รู้วิธีเขียน Monad หลายอัน ใครสามารถช่วยฉันได้บ้าง?
for {
session <- getSession(ticker) //IO[Future[Response]]
crumbF = session.flatMap(response => Future(parseCrumb(response.body)))
cookiesF = session.flatMap(response => Future(response.cookies))
crumb = Await.result(crumbF, 5 seconds) // Future[String]
cookies = Await.result(cookiesF, 5 seconds) //Future[Seq[Cookies]]
data <- getData(ticker, startDate, endDate, interval, crumb, cookies.head) // IO[Future[Response]]
stocksF = data.flatMap { response =>
import DefaultBodyReadables._
Future {
StockDf.mapDataToDf(response.body)
}
}
} yield stocksF
Future
โดยมีOption
อยู่ข้างใน หรือคุณกำลังพยายามทำงานกับโมนาดอื่นด้วยความเข้าใจfor
เดียวใช่หรือไม่ - person Grisha   schedule 23.10.2018for
เป็นวิธีที่ถูกต้องในการใช้รหัสนี้ การมอบหมายงานทั้งหมดและคำสั่งAwait
จะชัดเจนยิ่งขึ้นหากเขียนออกมาเป็นโค้ดปกติ ในท้ายที่สุดนี่เป็นเพียงmap
ที่ซ้อนอยู่ในflatMap
และอาจดูชัดเจนยิ่งขึ้นที่เขียนออกมาแบบนั้น และเหตุใดจึงโทรflatMap
และล้อมผลลัพธ์ด้วยFuture
แทนที่จะโทรmap
- person Tim   schedule 23.10.2018