for-compr可以产生2个单独的变量

时间:2016-01-02 03:52:30

标签: scala

我想知道for-compr是否有可能产生2个val,如:

val user, account = 
  for {
      user <-  ...
      account <- ..
  } yield (user, account)

如果可以,我该如何明确设置类型:

val user: Future[User], account: Future[Account] = for {... }

当我尝试上述内容时,第一个变量的结果如下:

val result = 
   for { 
    ..
   } yield (user, account)


result._1
result._2

我个人不喜欢用_1和_2来引用数据所以我希望我能一次性返回2个单独的val。

可能的?

2 个答案:

答案 0 :(得分:2)

在您的示例中,result的类型为Future[(User, Account)],因此result._1result._2没有任何意义。它必须是这样的:

result map { r =>
  r._1  // user
  r._2  // account
}

您可以使用匹配匿名函数模式来改善一些事情:

result map {
  case (user, account) => ...
}

答案 1 :(得分:-1)

初始化val时可以使用模式匹配。

val (x, y) = (5, 10.0)
x: Int = 5
y: Double = 10.0

所以在你的情况下

val (user: Future[User], account: Future[Account]) = for {... }