Почему сложение определяется с использованием нескольких списков параметров? - PullRequest
2 голосов
/ 05 февраля 2020

Я пытаюсь выяснить рифму или причину использования скобок в Scala, в частности, с помощью метода сгиба:

val sum = prices.fold(0.0)(_ + _)

Почему это так? Scala, похоже, не следует формату FP в целом (без скобок при вызовах методов), но там он делает ... разве это также требует скобок среди односимвольного аккумулятора? Почему не

val sum = prices.fold((0.0), (_ + _))

или

val sum = prices.fold 0.0 (_ + _)

?

1 Ответ

3 голосов
/ 05 февраля 2020

IterableOnce.fold определяется с использованием нескольких списков параметров возможно из-за причин вывода типа, как это было предложено Йоргом Миттагом

def fold[A1 >: A](z: A1)(op: (A1, A1) => A1): A1

с другой стороны, например, Either.fold определяется с использованием одного списка параметров

def fold[C](fa: A => C, fb: B => C): C

Подтверждение причин вывода типа, рассмотрим следующий пример

def zar[T](x: T)(f: (T, T) => T) = f(x, x)
def tar[T](x: T, f: (T, T) => T) = f(x, x)

zar(21)(_ + _)        // OK
tar(21, _ + _)        // Error: missing parameter type for expanded function 
tar[Int](21, _ + _)   // OK

Обратите внимание, что мы имели явно указывать параметр типа на tar, если не используются несколько списков параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...