【发布时间】:2018-04-18 08:54:17
【问题描述】:
我一直在玩 monad 转换器,我只创建了一个 Future[Option]。但是在阅读了一些博客之后,有些东西没有解释,我不明白。
在我的map 和flatMap 的实现中,在flatMap 中,一旦我获得了我的选项的值,并且我将函数应用于值,我必须调用函数@987654324 @.Value_passed_in_the_case_class(in this case future)
case class FutOpt[A](future: Future[Option[A]]) {
def map[B](f: A => B): FutOpt[B] = {
FutOpt(future.map(option => option.map(value => f(value)))
.recoverWith {
case e: Exception =>
Future.successful(Option.empty)
})
}
def flatMap[B](f: A => FutOpt[B]): FutOpt[B] =
FutOpt(future.flatMap(option => option match {
case Some(a) => f(a).future --> WHAT THIS .future IS DOING?
case None => Future.successful(None)
}))
}
那里发生了什么?如何运作?
问候。
【问题讨论】:
-
.future只是访问您在case class FutOpt[A](future: Future[Option[A]])中定义的字段 -
是的,我明白了,但为什么需要访问该字段?
标签: scala monads scalaz monad-transformers scala-cats