gpt4 book ai didi

scala - 如何使用类型级别的猫将 `Either[Error, Option[Either[Error, Account]]]` 转换为 `Either[Error, Option[Account]]`?

转载 作者:行者123 更新时间:2023-12-04 17:43:33 29 4
gpt4 key购买 nike

我正在使用 cats ,想知道怎么用它转一个数据。


val data = Either[Error, Option[Either[Error, Account]]]


val target: Either[Error, Option[Account]] = howToConvert(data)

如果有的话 Error发生,结果将是 Left(error)第一个出现的错误。

我现在可以这样做:
data match {
case Left(e) => Left(e)
case Right(Some(Right(y))) => Right(Some(y))
case Right(Some(Left(e))) => Left(e)
case Right(None) => Right(None)
}

但我正在寻找一些简单的方法

最佳答案

最简单的方法是sequenceOption ,这样你就会得到一个 Either[Error, Either[Error, Option[Account]]]然后将其压平。
使用猫语法,这真的很容易:

import cats.implicits._

val target: Either[Error, Option[Account]] =
data.flatMap(_.sequence)

澄清一下, sequence将类型构造函数“由内而外”,意味着内部 Option[Either[Error, Account]]变成了 Either[Error, Option[Account]] .

关于scala - 如何使用类型级别的猫将 `Either[Error, Option[Either[Error, Account]]]` 转换为 `Either[Error, Option[Account]]`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48257004/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com