2017-05-26 21 views

回答

4

考虑这样的事情:

def bar(strings: List[String]) = strings.foreach(println) 
def foo(ints: Seq[Int]) = bar(int.map(_.toString).toList) 

foo(List(1,2,3)) 
foo(1 to 3) 
foo(Stream.from(1).take(3)) 

foo接受INTS的Seq,将它们转换为字符串,并调用bar,想在List

您可以发送任何类型的Seqfoo,它使用.toList调用bar之前将其转换为一个List,因为这是唯一的类型就会接受。现在,如果foo的参数碰巧已经是List(就像上面的第一个示例中那样),它最终将调用List.toList,这只是一个更好,更优雅的替代方案,它使代码中的特殊情况检查具体类型的论点。

4

List扩展了GenTraversableOnce特征,这是许多其他可遍历集合的共同特征。

GenTraversableOncedeclares a toList方法使得所有的小类都可以转换成List。此方法必须List(实际上 - 通过返回this)实现。

+0

所以我们从来没有这样的情况,我们真的想要调用这种方法? – bzak

+2

如果你知道你手头的集合是一个List,那么不需要,它没有真正的用处。但是你可能有一个'GenTraversableOnce'类型的变量,它的_might_或_might不是'List'(你不知道实际的实现),还是一个不是扩展了'GenTraversableOnce'的列表的具体类型(例如'Array ') - 然后使用'toList'可能会有用。我已经看到它经常使用/使用它。 –

相关问题