如果isEmpty问题

ini*_*max 2 scala scala-collections

我有关于代码装饰的问题.

例如,我应该处理来自DAO的对象

val user1 = DAO.get(token)
val user2 = DAO.get(token)
val user3 = DAO.get(token)
Run Code Online (Sandbox Code Playgroud)

接下来我应该检查user.isDefined

if (user1.isEmpty || user2.isEmpty || user3.isEmpty ) {
return "error..."
}
else {
 ... 
}
Run Code Online (Sandbox Code Playgroud)

提到的代码看起来像命令式的风格,它可以更具功能性吗?如何更改功能?

BR!

dca*_*tro 7

假设DAO.get返回a Option[User],您可以使用for comprehension来指定如果所有3个选项都是a,应该发生什么Some.然后,用于getOrElse指定否则应该发生的事情.

val success: Option[String] = for {
    x <- DAO.get(token)
    y <- DAO.get(token)
    z <- DAO.get(token)
} yield "retrieved 3 users"

success getOrElse "error"
Run Code Online (Sandbox Code Playgroud)