Я не знаю, Лифт, но это общий вопрос.Прежде всего, ::
является оператором аргументов Scala:
scala> 1 :: 2 :: List(3, 4)
res0: List[Int] = List(1, 2, 3, 4)
Это означает, что super.validations
является некоторой разновидностью последовательности, а valMinLen(3, "Link URL must be at least 5 characters") _
является единственным значением в этом списке.
Из контекста становится очевидным, что в переопределенном методе validations
, который они вызывают super
version и , в начале добавляется дополнительная проверка.
Эта дополнительная проверка создаетсязвонок на valMinLen()
.Однако этот дополнительный вызов возвращает не элемент, соответствующий типу списка validations
, а функцию.Вместо добавления значения функции мы явно говорим (добавляя _
суффикс`), что мы хотим добавить саму функцию, а не возвращаемое значение этой функции.
Фрагмент кода стоит тысячи слов:
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>)
Сравните тип listOfInts
и listOfFunctions
.Я считаю, что синтаксис f _
в мире Scala называется частично примененной функцией .