scala flatMap展平嵌套列表

时间:2016-05-25 08:44:21

标签: scala flatmap

我正在学习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类文档中的说明“注意:编译器可能无法推断类型参数“。

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

2 个答案:

答案 0 :(得分:1)

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

我分解每一步并解释here

答案 1 :(得分:0)

因为展开的最后一步会失败吗?您将拥有List(elements),第二版flatten需要在List中提供List