Да, /:
может быть использован в качестве оператора инфиксного. Тем не менее, раз операция занимает три аргументы:
- Последовательность сложить через
- Начальное значение для снижения
- Функция используется для складывания
Использование инфиксными вас может указывать только два из этих трех аргументов: последовательность (которая является получателем) и начальное значение. Тот факт, что (map /: lst)
является частичным приложением, отражает тот факт, что вам все еще не хватает аргумента. Вот пример продукта последовательности чисел, начиная с начальным значением 1:
(1 /: xs)(_*_)
Поскольку Scala поддерживает фигурные скобки для функциональных литералов, вы также можете использовать это, чтобы сделать аргумент функции выглядеть как Функциональный орган:
(1 /: xs) { (x, y) =>
x * y
}
Kristian, @DaoWen, Как я понимаю, 'foldLeft' имеет два аргумента - начальное значение и функцию сгибания. Тогда почему 'lst.foldLeft (map, addToMap)' приводит к ошибке 'слишком много аргументов для метода foldLeft: (z: B) (f: (B, (String, Int)) => B) B'? –
'foldLeft' имеет две группы параметров (как видно по двум группам скобок) - первая группа ожидает один аргумент, который является причиной сообщения об ошибке. Второй аргумент относится ко второй группе. Я отредактировал ответ на примере с помощью 'foldLeft'. Как вы можете видеть, это буквально замена для '/:' –
Kristian, спасибо! Где читать о группах параметров функции Scala? Не удается найти это в документах до сих пор ... –