Когда я пытаюсь использовать переменную Option. Я считаю, что есть 4 раза методы.
fold[B](ifEmpty:=>B)(f:Int=>B)
fold[A1 >: Int](z : A1)(op : (A1 , A1) => A1)
foldLeft[B](z : B)(op : (B , Int) => B)
foldRight[B](z : B)(op : (Int , B) => B)
Первый метод fold[B](ifEmpty:=>B)(f:Int=>B)
происходит из класса Option.
Остальные 3 методы происходят из черты TraversableOnce.
Итак, мой вопрос:
1> Почему переменная может использовать метод foldLeft / foldRight из черты TraversableOnce, в то время как класс Option не расширяет TraversableOnce?
2> Почему я не могу использовать сложение метод, но метод foldLeft / foldRight из черты TraversableOnce? Поскольку я использую fold[A1 >: Int](z : A1)(op : (A1 , A1) => A1)
. IDE не компилируется успешно.
val x = Some(5)
x.fold(0)( (a) => a)
x.fold(0)( (a,b) => a + b) //compile failed
val y = List(5)
y.fold(0)( (a,b) => a + b)