我见过这个功能.我用泛型类型创建了这个函数,但我看到了这个解决方案.我不知道是否输入任何更好的args或者有不同的args.
def flatten(ls: List[Any]): List[Any] = ls flatMap {
case ms: List[_] => flatten(ms)
case e => List(e)
}
Run Code Online (Sandbox Code Playgroud)
要么
def flatten(ls: List[A]): List[A]
Run Code Online (Sandbox Code Playgroud)
其中一个区别是,当你服用时Any,你会丢失所有类型的信息,但是对于泛型,你仍然有类型的概念.
例如,如果你有一个函数(Any) => Any,你可以采用任何类型并返回任何类型.
但是使用泛型,你可以限制,如果你拿一个实例,T你也必须返回一个实例T,如(T) => T.
使用泛型将使编译器能够帮助您检查是否确实返回了a List[T].