Si tengo una expresión match
, ¿cómo puedo hacer que automáticamente ignore un no coincidente sin haciendo explícitamente case _ =>
? ¿Hay alguna manera de crear una función que haga algo como esto tal vez?¿Hay alguna manera de ignorar un caso que no coincide?
Respuesta
Necesita una forma genérica para manejar "ignorar". Las opciones, entre otras clases, proporcionan esto (entre otras cosas). Para que pueda:
val i = 7
Some(i) collect {
case 3 => "Yay!"
case 5 => "Boo!"
}
para obtener None
(escrito como un Option[String]
). Básicamente, si cambia x match
a Some(x) collect
, obtendrá la funcionalidad que desea. Es mejor hacer esto cuando uno se siente cómodo con las opciones de manejo.
Cualquier bloque de coincidencia que no pueda manejar todos los posibles valores de entrada forma una Función Parcial, que es absolutamente posible de definir y usar en Scala.
PartialFunction
es una subclase de Function
, y agrega el método isDefinedAt
, que devuelve verdadero si tiene una coincidencia definida para el valor proporcionado. Las funciones parciales se utilizan mejor en lugares que prueban la definición, como catch blocks o el método collect
en la API de 2,8 colecciones. De lo contrario, obtendrá una excepción si intenta llamarlo con un valor que no está definido como una entrada.
Escribe un matcher genérica:
object Match {
def default: PartialFunction[Any, Unit] = { case _ => }
def apply[T](x: T)(body: PartialFunction[T, Unit]) = (body orElse default)(x)
}
Ejemplo:
scala> 1 to 5 foreach (Match(_) {
| case 2 => println("two")
| case 3 => println("three")
| }
|)
two
three
Usted también puede estar interesado en los métodos PartialFunction
's compañero de objetos cond
y condOpt
.
Gracias por la respuesta. Entonces, ¿no existe una función de tipo 'reunir' equivalente para 'foreach'? –
@MatthewSaltz No hay. –
- 1. ¿Hay alguna manera de ignorar una sola advertencia FindBugs?
- 2. ¿Hay alguna manera de hacer que un ExecutorService funcione recursivamente?
- 3. ¿Hay alguna manera de saber si hay fallas en mi caso de prueba PHPUnit de tearDown()?
- 4. ¿Hay alguna manera de despertar un hilo que duerme?
- 5. ¿Hay alguna manera de ignorar los espacios de nombres durante una transformación XSL?
- 6. ¿Hay alguna manera de negar un predicado?
- 7. Ignorar el caso con difflib.get_close_matches()
- 8. ¿Hay alguna forma de ignorar las columnas que no existen en INSERTAR?
- 9. ¿Hay alguna forma de ignorar el error de 'Declaración inalcanzable'?
- 10. ¿Hay alguna manera para que un div en particular ignore su posicionamiento de div principal?
- 11. ¿Hay alguna manera de ignorar los errores de Visual Studio lanzados por XAML?
- 12. Restricción de hibernación ConstraintViolationException. ¿Hay alguna manera fácil de ignorar las entradas duplicadas?
- 13. ¿Hay alguna manera de hacer que USStateField() de Django no tenga un valor preseleccionado?
- 14. ¿Hay alguna manera de que un evento de inicio táctil no active el evento click?
- 15. ¿Hay alguna forma de simplificar esta declaración de caso?
- 16. ¿Hay alguna manera de cancelar StorageFile.CopyAsync()?
- 17. Servidor SQL: ¿hay alguna manera fácil de ignorar las comillas durante la búsqueda?
- 18. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 19. ¿Hay alguna manera de comentar XAML que contiene comentarios?
- 20. ¿Hay alguna manera de hacer que TFS se pueda enlazar?
- 21. ¿Hay alguna manera de hacer que un DIV no sea seleccionable?
- 22. ¿Hay alguna manera de crear un objeto python que no se pueda ordenar?
- 23. ¿Hay alguna manera de decirle a NServiceBus que no vuelva a intentar un mensaje?
- 24. ¿Hay alguna manera de configurar vimdiff para ignorar TODOS los espacios en blanco?
- 25. En Scala, ¿hay alguna manera fácil de convertir una clase de caso en una tupla?
- 26. ¿Hay alguna manera de que Asio funcione sin Boost?
- 27. ¿Hay alguna manera de que Apache log logre slow requests?
- 28. ¿Hay alguna manera de hacer que UserControl sea inafocable?
- 29. Ignorar error de aserción en un caso de prueba (JUnit)
- 30. ¿Hay alguna manera agradable en trigger.io para manejar OAuth?
Más allá de la excepción, creo que también recibirás una advertencia en el sitio de definición, ¿no es cierto? – Blaisorblade