从正确的resut scala获得价值

时间:2016-06-22 10:59:12

标签: scala

使用此代码:

for {
  id1 <- invDAO.save(inv)
} yield {
  println(s"id1, $id1")
}

我得到:id1, Right(7f5c7a58-8caa-4329-8a21-df27ed5d661b) 如何访问id值?

2 个答案:

答案 0 :(得分:3)

RightEither的两个子类型之一(另一个是Left)。

Either类似于两个Option类型(其中SomeNone为其子类型)。就像Option用于捕获方法可能具有空结果的想法一样,Either用于返回结果(在Right中)或错误值(在Left)。

您应该匹配invDAO.save(inv)的返回值,看它是否返回RightLeft,并正确处理结果。例如:

invDAO.save(inv) match {
  case Right(id1) => println(s"id1, $id1")
  case Left(msg)  => println(s"An error occurred: $msg")
}

修改 - 如果invDao.save(inv)实际上返回Seq Either之类的内容,那么您可以使用for

for (result <- invDao.save(inv)) result match {
  case Right(id1) => println(s"id1, $id1")
  case Left(msg)  => println(s"An error occurred: $msg")
}

答案 1 :(得分:0)

您可以更改代码以匹配save

的结果
for {
  Right(id1) <- invDAO.save(inv)
} yield {
  println(s"id1, $id1")
}

会打印id1, 7f5c7a58-8caa-4329-8a21-df27ed5d661b

当然 - 这只适用于确实与模式匹配的返回值,即Right的实例。如果返回Left,您将不会获得任何匹配项,也不会打印任何内容。