En mi aplicación, estoy filtrando un conjunto de archivos de varios tipos, como la siguiente:método Scala que devuelve múltiples funciones de filtro concatenados
val files:Array[File] = recursiveListFiles(file)
.filter(!_.toString.endsWith("png"))
.filter(!_.toString.endsWith("gif"))
.filter(!_.toString.endsWith("jpg"))
.filter(!_.toString.endsWith("jpeg"))
.filter(!_.toString.endsWith("bmp"))
.filter(!_.toString.endsWith("db"))
Pero sería más cuidadosamente para definir un método que toma una String array y devuelve todos esos filtros como una función concatenada. ¿Es eso posible? Así que puedo escribir
val files:Array[File] = recursiveListFiles(file).filter(
notEndsWith("png", "gif", "jpg", "jpeg", "bmp", "db")
)
+1 es la razón por la que amo Scala – onof
Bueno, aunque probablemente implementaría "endsWith" en lugar de "notEndsWith", como regla. Si implementa "notEndsWith" y realmente necesita "endsWith", termina codificando como! NotEndsWith, lo cual es confuso debido al doble negativo. Siempre es más importante definir las condiciones de forma positiva con la programación funcional, ya que la densidad adicional de los constructos funcionales exige atención adicional a la claridad de expresión –