我正在学习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
类文档中的说明“注意:编译器可能无法推断类型参数“。
为什么第二个代码不起作用的任何想法?
答案 0 :(得分:1)
其他人有不同的问题,但使用相同的例子。
我分解每一步并解释here
答案 1 :(得分:0)
因为展开的最后一步会失败吗?您将拥有List(elements)
,第二版flatten
需要在List
中提供List
。