我见过这个功能。我用泛型类型创建了这个函数,但我看到了这个解决方案。我不知道输入Any的args是否更好或者有所不同。
def flatten(ls: List[Any]): List[Any] = ls flatMap {
case ms: List[_] => flatten(ms)
case e => List(e)
}
或
def flatten(ls: List[A]): List[A]
答案 0 :(得分:7)
其中一个不同之处在于,当您使用Any
时,您会丢失所有类型信息,但是对于泛型,您仍然有类型的概念。
例如,如果您的函数为(Any) => Any
,则可以采用任何类型并返回任何类型。
使用通用名称,您可以限制,如果您使用T
的实例,则还必须将T
的实例返回为(T) => T
。
使用泛型将使编译器能够帮助您检查您是否确实返回List[T]
。