Вот компоненты type U = List[Fields => Double]
:
Fields => Double
это тип функции
List
является конструктором типов для типа коллекции
type U
- псевдоним типа
Например, скажем, у нас есть следующие функции
val foo: Int => String = (x: Int) => "hello " + x
val bar: Int => String = (x: Int) => "goodbye " + x
val zar: Int => String = (x: Int) => "greetings " + x
Тогда мы могли бы собрать их в List
из Int => String
функций, например,
List[Int => String](foo, bar, zar)
таким же образом мы можем собрать целые числа в список
List[Int](1,3,42)
В Scala мы говорим, что функции являются значениями первого класса , что означает, что мы можем использовать их так же, как и любое другое значение, то есть передавать их в и из других функций, добавлять их в коллекции, назначать их переменные и т. д.
type U
- псевдоним типа, означающий, что он дает другое имя типу с правой стороны. Мы можем использовать его, например, для упрощения длинного имени типа, поэтому вместо записи List[Int => String]
мы можем просто написать U
:
def qux(c: U): U = c
будет таким же, как
def qux(c: List[Int => String]): List[Int => String] = c
List[T]
- это конструктор типа, означающий, что когда мы подставляем конкретный тип для T
, например Int
, или String
, или Int => String
, мы получаем соответствующие типы List[Int]
, List[String]
, и List[Int => String]
.