我有以下模式:
GET / my / route controllers.something.Class.method(maybeA:Optional [Int],maybeB:Optional [Int])
在方法中,我希望能够使用这些参数。我觉得我不明白使用的正确模式。我想做的是:
blah match {
case Some(someCase) => // do something
case _ => for {
a <- maybeA
b <- maybeB
} yield {
somethingThatReturnsAFuture(a, b)
}
}
问题在于for comprehension会返回Option[Future[Int]]
,但我需要它返回Future[Int]
。我希望能够在理解结束时抛出一个get
,但这闻起来很有趣(我实际上并不认为可以在get
结束时抛出{{1}}。理解)。
有什么建议吗?
答案 0 :(得分:0)
如果某些内容为Option
,那么直接处理此内容的结果也将为Option
。摆脱Option
的唯一方法是定义None
案例。
val resultOpt: Option[Future[Int]] = blah match { ...
val result: Future[Int] = resultOpt match {
case Some(f) => f
case None => Future.successful(0)
}
或者只使用getOrElse
。相同的代码,不同的风格:
val resultOpt: Option[Future[Int]] = blah match { ...
val result: Future[Int] = resultOpt.getOrElse(Future.successful(0))
关于这一点: http://alvinalexander.com/scala/how-to-use-multiple-options-for-loop-comprehension