只是另一个canBuildFrom问题

时间:2011-01-30 00:31:15

标签: scala scala-collections

我正在经历集合api和返回的操作类型,它可以修改容器的类型,并且包含的​​元素的类型具有非用例形式的所有标题,类似于以下内容:

{{ 2}} 很明显,def map [B, That] (f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]):That确保“回退”到其他集合类型(如果所包含的项目更改为That以外BitSet后退到Set )。但是如何确定物品的类型呢?我希望返回类型为Int,但事实并非如此。为什么?请教育我: - )

1 个答案:

答案 0 :(得分:3)

您已经自己给出了答案:如果您希望能够在适当的情况下返回BitSet,则需要在返回类型中删除该类型参数。显然没有BitSet[Int]

您需要的所有信息都已由适当的CanBuildFrom隐含处理,这些隐含具有CanBuildFrom[Coll, A, Traversable[A]]类型的回退定义(或类型层次结构中可能超过Traversable的任何内容)。

当然,CanBuildFrom必须是明智的,但我认为实际上可能会滥用它并返回一个真正奇怪的That。尽管如此,默认值非常合理。