3
В контексте another stackoverflow question, у меня есть этот фрагмент:Infer параметр типа от аргумента функции
def orderedGroupBy[T, P](seq: Traversable[T], f: T => P): Traversable[Tuple2[P, Traversable[T]]] = {
@tailrec
def accumulator(seq: Traversable[T], f: T => P, res: List[Tuple2[P, Traversable[T]]]): Traversable[Tuple2[P, Traversable[T]]] = seq.headOption match {
case None => res.reverse
case Some(h) => {
val key = f(h)
val subseq = seq.takeWhile(f(_) == key)
accumulator(seq.drop(subseq.size), f, (key -> subseq) :: res)
}
}
accumulator(seq, f, Nil)
}
я хотел бы использовать его так же, как можно использовать .groupBy, например:
orderedGroupBy(1 to 100, (_/10))
Но компилятор дает ошибку о не имея достаточно информации типа
<console>:10: error: missing parameter type for expanded function ((x$1) => x$1.$div(10))
orderedGroupBy(1 to 100, (_/10))
Что идиоматических способ сделать это?
Является ли это ожидаемой вещью? Как это задержит в обзоре кода? Спасибо за ответ кстати. – hraban
На самом деле я предпочел бы карри, потому что это позволит вам использовать его с кодовым блоком, не выглядя ужасно. 'orderedGroupBy (mySeq) {element => .....}' .. Представьте, что у вас больше логики. 'foldLeft' в библиотеке коллекций scala делает то же самое. –
@hraban Это совершенно стандартно в Scala. –