Похоже на ошибку компилятора. Я проверил это выражение на разных версиях Scala и получил:
def f(xs: List[Int]) = (0 /: xs) _
Он ведет себя одинаково для 2.9.1.final
и 2.8.2.final
, но для 2.7.7.final
выдает другое сообщение об ошибке (Iterable
против TraversableOnes
), но я думаю, что это из-за редизайна библиотеки коллекций в более старых версиях.
def f(xs: List[Int]) = (0 /: xs) _
<console>:4: error: missing arguments for method /: in trait Iterable;
follow this method with `_' if you want to treat it as a partially applied function
Выражение, которое я упомянул в комментарии, ведет себя по-разному для разных версий scala.
def f(xs: List[Int]): (Int, Int) => Int => Int = (0 /: xs)
scala 2.9.1.final:
found : (Int, Int) => Int => Int
required: (Int, Int) => Int => Int
Действительно запутанное сообщение компилятора, определенно ошибка.
scala 2.8.2.final:
found : => ((Int, Int) => Int) => Int
required: (Int, Int) => (Int) => Int
Странно =>
в начале, по сравнению с 2.7.7. Конечный результат выглядит как регрессия.
scala 2.7.7.final:
found : ((Int, Int) => Int) => Int
required: (Int, Int) => (Int) => Int
found
вроде бы правильно, но код все еще не работает.
Я искал на scala bugtracker похожие проблемы, но не смог найти ничего подходящего. Думаю, достаточно создать заявку (или две? Похоже, эти две ошибки не связаны).