2011-07-26 13 views

Respuesta

6

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:

https://github.com/OlegIlyenko/scaldi/blob/f3697ecaa5d6e96c5486db024efca2d3cdb04a65/src/main/scala/scaldi/Module.scala#L72

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 OptionList (que, o bien vacío o tiene un elemento) con toList método.

+0

su enlace está muerto (ahora) –

+0

@AdamFraser: Lo siento por esto. Actualicé el enlace y también usé el árbol de confirmación específico en lugar del maestro. – tenshi

10

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))

24
  • map: le permite transformar un valor "dentro" de un Option, como probablemente ya sabe a List s. Esta operación hace Option un functor (se puede decir "endofunctor" si quieres asustar a sus colegas)
  • flatMap: Option es en realidad una mónada, y flatMap 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 en Option, pero el valor que tiene ya está "ajustado" en Option, por lo que flatMap le ahorra el desenvolvimiento antes de aplicar la función. P.ej. si tiene un Option[Map[K,V]], puede escribir mapOption.flatMap(_.get(key)). Si utilizara un simple map aquí, obtendría un Option[Option[V]], pero con flatMap obtendrá un Option[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 tipo Option[Option[T]], flatten lo convierte en Option[T].Es lo mismo que flatMap(identity(_)).
  • orElse: Si tiene varias alternativas envueltas en Option s, y desea que el primero que tiene en realidad un valor, se pueden encadenar estas alternativas con orElse: steakOption.orElse(hamburgerOption).orElse(saladOption)
  • getOrElse: Obtener el valor de la Option, pero especifique un valor predeterminado si está vacío, por ejemplo nameOption.getOrElse("unknown").
  • foreach: Haga algo con el valor dentro, si existe.
  • isDefined, isEmpty: determine si este Option contiene un valor.
  • forall, exists: Comprueba si un predicado determinado es válido para el valor. forall es lo mismo que option.map(test(_)).getOrElse(true), exists es lo mismo, solo con false por defecto.
  • toList: Sorpresa, convierte el Option en un List.
Cuestiones relacionadas