Каррирование в основном используется, если второй раздел параметров является функцией или параметром по имени.Это имеет два преимущества.Сначала аргумент функции может выглядеть как блок кода, заключенный в фигурные скобки.Например,
using(new File(name)) { f =>
...
}
Это читается лучше, чем альтернатива без ускорения:
using(new File(name), f => {
...
})
Во-вторых, и, что более важно, вывод типа обычно может определить тип параметра функции, поэтому он не долженбудет дан на сайте вызова.Например, если я определяю max
функцию для списков, как это:
def max[T](xs: List[T])(compare: (T, T) => Boolean)
, я могу назвать это так:
max(List(1, -3, 43, 0)) ((x, y) => x < y)
или даже короче:
max(List(1, -3, 43, 0)) (_ < _)
Если бы я определил max
как функцию без кэширования, это не сработало бы, я бы назвал это так:
max(List(1, -3, 43, 0), (x: Int, y: Int) => x < y)
Если последний параметр не является функцией илиИмя параметра я бы не советовал каррировать._
Нотация Scala является не только легкой, но и более гибкой и понятной для IMO.