scala - español - crear aplicaciones con powerapps
¿Una mejor manera de probar el valor de una opción? (6)
Creo que también se podría utilizar la coincidencia de patrones. De esa manera usted extrae el valor interesante directamente:
val opt = Some("oxbow")
opt match {
case Some(value) => println(value) //Doing something
}
A menudo me encuentro con una Option[T]
para algún tipo T
y deseo probar el valor de la opción contra algún valor. Por ejemplo:
val opt = Some("oxbow")
if (opt.isDefined && opt.get == "lakes")
//do something
El siguiente código es equivalente y elimina el requisito de probar la existencia del valor de la opción
if (opt.map(_ == "lakes").getOrElse(false))
//do something
Sin embargo esto me parece menos legible. Otras posibilidades son:
if (opt.filter(_ == "lakes").isDefined)
if (opt.find(_ == "lakes").isDefined) //uses implicit conversion to Iterable
Pero tampoco creo que esto exprese claramente la intención, que sería mejor como:
if (opt.isDefinedAnd(_ == "lakes"))
¿Alguien tiene una mejor manera de hacer esta prueba?
Para Scala 2.11, puedes usar Some(foo).contains(bar)
Qué tal si
if (opt == Some("lakes"))
Esto expresa la intención claramente y es sencillo.
También puede utilizar para la comprensión:
for {val v <- opt if v == "lakes"}
// do smth with v
Walter Chang FTW, pero aquí hay otra alternativa incómoda:
Some(2) exists (_ == 2)
val opt = Some("oxbow")
opt match {
case Some("lakes") => //Doing something
case _ => //If it doesn''t match
}