如何只映射 scala 中的左值?
How map only left value from scala Either?
考虑一段代码:
val some: OneCaseClass Either TwoCaseClass = ???
val r = some.left.map(_.toString)
为什么 r Serializable with Product with Either[String, TwoCaseClass]
类型而不是 Either[String, TwoCaseClass]
?
如何只映射左边的值?
因为 是 LeftProjection.map
的 return 类型。
map[X](f: (A) ⇒ X): Product with Serializable with Either[X, B]
但这不是问题。如果您愿意,可以使用类型归属:
val r: Either[String, TwoCaseClass] = some.left.map(_.toString)
看看Either
docs上的例子:
val l: Either[String, Int] = Left("flower")
val r: Either[String, Int] = Right(12)
l.left.map(_.size): Either[Int, Int] // Left(6)
r.left.map(_.size): Either[Int, Int] // Right(12)
l.right.map(_.toDouble): Either[String, Double] // Left("flower")
r.right.map(_.toDouble): Either[String, Double] // Right(12.0)
考虑一段代码:
val some: OneCaseClass Either TwoCaseClass = ???
val r = some.left.map(_.toString)
为什么 r Serializable with Product with Either[String, TwoCaseClass]
类型而不是 Either[String, TwoCaseClass]
?
如何只映射左边的值?
因为 是 LeftProjection.map
的 return 类型。
map[X](f: (A) ⇒ X): Product with Serializable with Either[X, B]
但这不是问题。如果您愿意,可以使用类型归属:
val r: Either[String, TwoCaseClass] = some.left.map(_.toString)
看看Either
docs上的例子:
val l: Either[String, Int] = Left("flower")
val r: Either[String, Int] = Right(12)
l.left.map(_.size): Either[Int, Int] // Left(6)
r.left.map(_.size): Either[Int, Int] // Right(12)
l.right.map(_.toDouble): Either[String, Double] // Left("flower")
r.right.map(_.toDouble): Either[String, Double] // Right(12.0)