Scala集合如何能够从地图操作中返回正确的集合类型?

时间:2011-03-04 23:41:43

标签: scala collections

注意:这是一个常见问题解答,具体问我所以我可以自己回答,因为这个问题似乎经常出现,我想把它放在一个可以(希望)可以轻松找到的位置搜索

根据对answer here

的评论提示

例如:

"abcde" map {_.toUpperCase} //returns a String
"abcde" map {_.toInt} // returns an IndexedSeq[Int]
BitSet(1,2,3,4) map {2*} // returns a BitSet
BitSet(1,2,3,4) map {_.toString} // returns a Set[String]

查看scaladoc,所有这些都使用从map继承的TraversableLike操作,那么为什么它始终能够返回最具体的有效集合呢?甚至是String,它通过隐式转化提供map

2 个答案:

答案 0 :(得分:79)

答案 1 :(得分:8)

Architecture of Scala Collections在线页面详细解释了基于2.8集合设计创建新馆藏的实际方面。

引用:

  

“如果你想集成一个新的集合类,那么需要做些什么,这样才能从正确类型的所有预定义操作中获益?在接下来的几页中,你将会看到两个这样做的例子。 “

它使用了一个用于编码RNA序列的集合和一个用于Patricia trie的集合。查找处理地图和朋友部分,了解如何返回相应的集合类型。