干净的方式来处理未来和选择

时间:2016-12-31 20:36:38

标签: scala

我的代码块目前看起来很丑陋:

for {
  maybeUser <- getUser(1)
} yield {
  if (maybeUser.isDefined) {
     someFunction1(maybeUser.get)
  } else None
}

getUser的样子:

def getUser(id: Int): Future[Option[user]]

3 个答案:

答案 0 :(得分:4)

你应该能够:

id

这将产生for { maybeUser <- getUser(1) } yield { maybeUser.map(someFunction1) } (其中Option[T]T的返回类型),它应该是您想要的。

有关someFunction1模式的精彩摘要,我无法高度推荐这篇文章:Your Options Don't Match

答案 1 :(得分:0)

perl -0777 -ne 'while(m/((\s|\t)+)Recent\n\1Comments\n\1Tags/g){print "$&\n";}' /path/to/file

假设someFunction1(user)返回一个Option(否则调用Some(someFunction1(user))

答案 2 :(得分:-1)

您可以尝试更具可读性。

val mayBe = getUser(1)
(for {
     m <- maybe
     if m.isDefined
   } yield m.get //Seq(m.get)
 ).recover {
    _=> ??? //Seq.empty[MType]
 }