为什么标准集合类型中没有toVector方法(如toList,toArray)?

sdk*_*ldf 7 scala

如果我们应该使用Vector作为默认的Sequence类型,为什么标准集合类型中没有toVector方法(如toList,toArray)?

在原型设计阶段,是否可以将所有集合符合Seq类型并在所有集合返回上使用toSeq(将所有内容转换为Seq)?

Lui*_*hys 14

通常情况下,你应该更关注与集合实现,而不是它的具体类型的接口,即你应该考虑在以下方面Seq,LinearSeqIndexedSeq而不是List,ArrayVector,这是具体实现.所以按理说不应该有toListtoArray两种,但我想他们在那里,因为他们是如此重要.

toIndexedSeq实践中的方法为您提供了一个Vector,除非集合覆盖它,以便提供更有效的实现.您还可以制作一个Vector,Vector() ++ c其中c包含您的收藏.

  • 我认为无论如何都应该有'toVector`.有时整个代码到界面的东西很重要,就像在API边界一样,但大多数时候你只是想完成工作而缺少"toVector"只是令人讨厌.`Vector`是一个伟大的通用收藏品; `List`和`Array`的用法相当专业. (4认同)
  • 如果你需要它来覆盖所有的Iterables,那么一定要这样做,但是当你错误地传递你的方法时,编译器不会抱怨!我认为在OO中,理论上你应该接受最普遍的类型并返回最具体的类型.对于集合,使接受的类型过于通用将意味着返回的类型也将非常通用(请参阅此问题:http://stackoverflow.com/q/8235462/770361).所以在实践中你采用`List`等`seq`的方法是使用IMO的一个很好的折衷方案. (3认同)