No lo sé Levantar, pero esta es una pregunta general. En primer lugar, la ::
es un operador contras Scala:
scala> 1 :: 2 :: List(3, 4)
res0: List[Int] = List(1, 2, 3, 4)
Esto significa que super.validations
es una especie de secuencia y valMinLen(3, "Link URL must be at least 5 characters") _
es un valor único en esa lista.
Por el contexto parece obvio que en el método sobrescrito validations
que están llamando a la versión super
y Prepend una validación adicional al principio.
Esta validación adicional se crea mediante una llamada al valMinLen()
. Sin embargo, esta llamada adicional no devuelve un elemento que coincida con el tipo de lista validations
, sino una función. En lugar de anteponer el valor de la función, estamos diciendo explícitamente (añadiendo _
sufijo`) que queremos anteponer una función en sí misma, no un valor de retorno de esa función.
Código fragmento vale más que mil palabras:
scala> def f = 3
f: Int
scala> def g = 4
g: Int
scala> val listOfInts = List(f, g)
listOfInts: List[Int] = List(3, 4)
scala> val listOfFunctions = List(f _, g _)
listOfFunctions: List[() => Int] = List(<function0>, <function0>)
comparar el tipo de listOfInts
y listOfFunctions
. Creo que la sintaxis f _
se llama parcialmente aplicada a la función en Scala world.
¿Puede hacer referencia a "minimumValidation" antes de haberlo declarado? – ziggystar
El orden de la declaración no importa en scala, no lo hace en la mayoría de los idiomas actuales. – Ramses