scala type-conversion option either

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 ?