Я изучаю Scala и решаю 99 проблем Scala. Для следующих упражнений:
Выравнивание структуры вложенного списка. Пример:
scala> flatten(List(List(1, 1), 2, List(3, List(5, 8))))
res0: List[Any] = List(1, 1, 2, 3, 5, 8)
Решение дается как
def flatten(ls: List[Any]): List[Any] = ls flatMap {
case ms: List[_] => flatten(ms)
case elements => List(elements)
}
Но мне было интересно, почему следующее не работает?
def flatten[A](ls: List[List[A]]): List[A] = ls flatMap {
case ms: List[_] => flatten(ms)
case elements => List(elements)
}
IntelJ IDEA сообщает мне, что проблема связана с частью flatten(ms)
, в которой говорится, что «невозможно разрешить сглаживание ссылок с такой подписью», а в документации класса List
для flatten
говорится: «Примечание: компилятор может быть не в состоянии определить параметр типа».
Есть идеи, почему второй код не работает?