He leído el blog post me recomendó here. Ahora me pregunto para qué son útiles esos métodos. ¿Puede mostrar ejemplos de uso de forall
(en comparación con foreach
) y toList
de Option
?Ejemplos del uso de algunos métodos de la Opción de Scala
Respuesta
Tengo un ejemplo práctico del método toList
. Puede encontrarlo en scaldi (mi dependencia Scala marco inyección) en Module.scala en la línea 72:
En este método contexto getBindings
puede devolver cualquiera Nil
o List
con un solo elemento. Puedo recuperarlo como Option
con discoverBinding
. Me parece conveniente que sea capaz de convertir a Option
List
(que, o bien vacío o tiene un elemento) con toList
método.
Muchos de los métodos de Opción pueden estar allí más por la uniformidad (con colecciones) que por su utilidad, ya que son funciones muy pequeñas y no ahorran mucho esfuerzo, pero sirven para un propósito, y sus significados son claros una vez que está familiarizado con el marco de recopilación (como a menudo se dice, la opción es como una lista que no puede tener más de un elemento).
forall comprueba una propiedad del valor dentro de una opción. Si no hay ningún valor, pase el cheque. Por ejemplo, si en un alquiler de coches, se le permite una additionalDriver: Option[Person]
, puede hacerlo
additionalDriver.forall(_.hasDrivingLicense)
exactamente lo mismo que lo haría si se permitía que varios conductores adicionales y que tenía una lista.
toList puede ser una conversión útil. Supongamos que tiene opciones: Lista [Opción [T]], y desea obtener una Lista [T], con los valores de todas las opciones que son Algunas. que puede hacer
for(option <- options; value in option.toList) yield value
(o mejor options.flatMap(_.toList)
)
map
: le permite transformar un valor "dentro" de unOption
, como probablemente ya sabe aList
s. Esta operación haceOption
un functor (se puede decir "endofunctor" si quieres asustar a sus colegas)flatMap
:Option
es en realidad una mónada, yflatMap
lo convierte en uno (junto con algo así como un Constuctor para un único valor). Este método se puede usar si tiene una función que convierte un valor enOption
, pero el valor que tiene ya está "ajustado" enOption
, por lo queflatMap
le ahorra el desenvolvimiento antes de aplicar la función. P.ej. si tiene unOption[Map[K,V]]
, puede escribirmapOption.flatMap(_.get(key))
. Si utilizara un simplemap
aquí, obtendría unOption[Option[V]]
, pero conflatMap
obtendrá unOption[V]
. Este método es más frío de lo que parece, ya que permite funciones de la cadena juntos de una manera muy flexible (que es una razón por Haskell ama mónadas).flatten
: Si tiene un valor de tipoOption[Option[T]]
,flatten
lo convierte enOption[T]
.Es lo mismo queflatMap(identity(_))
.orElse
: Si tiene varias alternativas envueltas enOption
s, y desea que el primero que tiene en realidad un valor, se pueden encadenar estas alternativas conorElse
:steakOption.orElse(hamburgerOption).orElse(saladOption)
getOrElse
: Obtener el valor de laOption
, pero especifique un valor predeterminado si está vacío, por ejemplonameOption.getOrElse("unknown")
.foreach
: Haga algo con el valor dentro, si existe.isDefined
,isEmpty
: determine si esteOption
contiene un valor.forall
,exists
: Comprueba si un predicado determinado es válido para el valor.forall
es lo mismo queoption.map(test(_)).getOrElse(true)
,exists
es lo mismo, solo confalse
por defecto.toList
: Sorpresa, convierte elOption
en unList
.
- 1. ¿Cuáles son algunos ejemplos del uso de Nokogiri?
- 2. ¿Cuáles son algunos ejemplos de casos de uso para literales de símbolos en Scala?
- 3. Ejemplos de uso creativo y útil del operador en Scala
- 4. ¿Cuáles son algunos buenos ejemplos de uso de WPF Datagrid?
- 5. ¿Cuáles son algunos ejemplos de "buen uso" de fundición dinámica?
- 6. Algunos buenos ejemplos de personalización de Sphinx?
- 7. Ejemplos del mundo real de los métodos de protocolo @opcional
- 8. ¿Cuáles son algunos ejemplos de interfaces Go?
- 9. Ejemplos completos del uso del paquete pySerial
- 10. Uso de los métodos de scala vararg en java
- 11. ejemplos de uso iTextSharp PdfCopy
- 12. Combinación de la opción Scala [Iterable [_]]
- 13. Ejemplos concretos del uso de árboles de búsqueda binarios?
- 14. ¿Qué métodos de Scala devuelven null en lugar de una opción y por qué?
- 15. Ejemplos de uso para Jetty's ProxyServlet.Transparent class
- 16. Ejemplos MVC uso de var
- 17. Uso del modificador final privado de Scala?
- 18. Buenos ejemplos de código scala idiomático
- 19. ¿Hay ejemplos completos que hagan uso de todos los métodos de delegado de NSURLConnection?
- 20. Ejemplos de uso práctico de Boost :: MPL?
- 21. ¿Dónde encontrar ejemplos de métodos HTTP?
- 22. ¿Cuáles son algunos ejemplos de la vida real de patrones de diseño utilizados en el software
- 23. Algunos ejemplos de procesos comunes en tiempo real en Linux
- 24. ¿Cuáles son algunos ejemplos impresionantes de código funcional?
- 25. ¿Dónde podría encontrar más ejemplos del uso de PetitParser?
- 26. Uso varargs de Scala
- 27. Ejemplos de uso de RedisStore en socket.io
- 28. ¿Qué es OSGi y cuáles son algunos ejemplos de su uso?
- 29. Pruebas unitarias Algunos métodos de servicio web
- 30. comportamiento asintótico de métodos Scala
su enlace está muerto (ahora) –
@AdamFraser: Lo siento por esto. Actualicé el enlace y también usé el árbol de confirmación específico en lugar del maestro. – tenshi