3

我正在学习 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)
}

IntellJ IDEA 告诉我问题出在flatten(ms)部件上,说“无法使用这样的签名解析引用变平”,并且在List类文档中flatten说“注意:编译器可能无法推断类型参数”。

任何想法为什么第二个代码不起作用?

4

2 回答 2

1

其他人有不同的问题,但使用相同的示例。

我分解每个步骤并在这里解释

于 2016-05-25T10:05:12.780 回答
0

因为解包的最后一步会失败?您将拥有List(elements),第二个版本flatten需要ListList.

于 2016-05-25T09:02:39.863 回答