ПРИМЕЧАНИЕ. Я использую Scala 2.8 — может ли это быть проблемой?
Почему я не могу использовать функцию fold
так же, как foldLeft
или foldRight
?
В Set scaladoc сказано, что:
Результат свертки может быть только супертипом параметра типа этой параллельной коллекции
T
.
Но я не вижу параметра типа T
в сигнатуре функции:
def fold [A1 >: A] (z: A1)(op: (A1, A1) ⇒ A1): A1
В чем разница между foldLeft-Right
и fold
и как использовать последний?
РЕДАКТИРОВАТЬ: Например, как мне написать складку, чтобы добавить все элементы в список? С foldLeft
это будет:
val foo = List(1, 2, 3)
foo.foldLeft(0)(_ + _)
// now try fold:
foo.fold(0)(_ + _)
>:7: error: value fold is not a member of List[Int]
foo.fold(0)(_ + _)
^
T
» Скаладока — этоA
в подписи, которую вы скопировали. - person Jean-Philippe Pellet   schedule 06.06.2011fold
появился в версии 2.9. - person Jean-Philippe Pellet   schedule 06.06.2011fold
появился в версии 2.9 с параллельными коллекциями. - person Aaron Novstrup   schedule 06.06.2011fold
в библиотеке Scala (это было из-за старой версии Scala). Таким образом, я не хотел, чтобы это был теоретический вопрос, как его воспринимали многие люди. Так что ответ меня удовлетворил. Я чувствую, что изменение принятого ответа также будет означать изменение самого вопроса. - person Andriy Drozdyuk   schedule 09.01.2017