some none has create check scala scala-option

none - Opción Scala-Deshacerse de if(opt.isDefined){}



scala option get (4)

El siguiente código no puede hacer algo útil, ya que después de if , actualThingIWant no siempre se define y, como tal, este código no se compilará, siempre y cuando intente utilizar actualThingIWant más adelante.

val opt = somethingReturningAnOpt if (opt.isDefinedAt) { val actualThingIWant = opt.get }

Por lo tanto, tienes que proporcionar un valor predeterminado. Esto se puede lograr con getOrElse :

val thingIWant = opt.getOrElse(myDefaultValue)

O si no desea tener actualThingIWant después del cuerpo de if , lo que significa que desea desencadenar algunos efectos secundarios solo si la opción está definida, puede escribir:

opt.foreach{ thingIWant => println(thingIWant) }

o un poco más corto

opt.foreach(println)

Mi código se está llenando con el siguiente patrón de código:

val opt = somethingReturningAnOpt if (opt.isDefinedAt) { val actualThingIWant = opt.get }

¿Hay alguna manera de simplificar esto? (Parece innecesariamente complejo y huele a código). Idealmente sería algo como:

if (Some(actualThingIWant) = somethingReturningAnOpt) { doSomethingWith(actualThingIWant) }

¿Es algo así posible?



O:

somethingReturningAnOpt.map(doSomethingWith(_))

Como en

val str = Some("foo") str.map(_.toUpperCase)

... y use flatMap cuando el resultado de doSomethingWith es una Opción en sí misma.

val index = Option(Map("foo" -> "bar")) index.flatMap(_.get("whatever")) // Returns None :-) index.map(_.get("whatever")) // Returns Some(None) :-(


Tal vez algo como esto:

somethingReturningAnOpt match { case Some(actualThingIWant) => doSomethingWith(actualThingIWant) case None => }

o como pst sugiere:

somethingReturningAnOpt.foreach { actualThingIWant => doSomethingWith(actualThingIWant) } // or... for (actualThingIWant <- somethingReturningAnOpt) { doSomethingWith(actualThingIWant) }