Convierta la opción a cualquiera en Scala
type-conversion option (1)
No, si lo haces de esta manera, no puedes dejar de lado el tipo.
El tipo de Left("No number")
se deduce como Either[String, Nothing]
. De la Left("No number")
el compilador no puede saber que desea que el segundo tipo de Either
sea Int
, y la inferencia de tipo no llega tan lejos que el compilador verá todo el método y decidirá si debería ser Either[String, Int]
.
Puedes hacer esto de varias maneras diferentes. Por ejemplo, con la coincidencia de patrones:
def foo(ox: Option[Int]): Either[String, Int] = ox match {
case Some(x) => Right(x)
case None => Left("No number")
}
O con una expresión if
:
def foo(ox: Option[Int]): Either[String, Int] =
if (ox.isDefined) Right(ox.get) else Left("No number")
O con Either.cond
:
def foo(ox: Option[Int]): Either[String, Int] =
Either.cond(ox.isDefined, ox.get, "No number")
Supongamos que necesito convertir la Option[Int]
en Either[String, Int]
en Scala. Me gustaría hacerlo así:
def foo(ox: Option[Int]): Either[String, Int] =
ox.fold(Left("No number")) {x => Right(x)}
Lamentablemente, el código anterior no se compila y necesito agregar el tipo Either[String, Int]
explícitamente:
ox.fold(Left("No number"): Either[String, Int]) {x => Right(x)}
¿Es posible convertir Option
en Either
this way sin agregar el tipo?
¿Cómo sugeriría convertir la Option
a Either
?