将map方法应用于Scala中的BitSet

时间:2014-06-04 17:15:09

标签: scala scala-collections bitset

使用可变的BitSet,我尝试将值3添加到其所有组件中,但是我收到了这个错误。

val x = BitSet()
x.add(10); x.add(20)
x.map(_ + 3)

这是消息。

<console>:12: error: ambiguous implicit values:
 both method newCanBuildFrom in class SortedSetFactory of type [A](implicit ord: Ordering[A])scala.collection.generic.CanBuildFrom[scala.collection.mutable.SortedSet.Coll,A,scala.collection.mutable.SortedSet[A]]
 and method canBuildFrom in object BitSet of type => scala.collection.generic.CanBuildFrom[scala.collection.mutable.BitSet,Int,scala.collection.mutable.BitSet]
 match expected type scala.collection.generic.CanBuildFrom[scala.collection.mutable.BitSet,Int,That]
              x.map(_ + 3)

我可以使用BitSet(x.toArray.map(_ + 3): _*)来获得我期望的结果,但我想可能有更好的方法。在Scala中的BitSet中应用map有什么问题?

1 个答案:

答案 0 :(得分:3)

您可以使用

x.map(_ + 3)(BitSet.canBuildFrom)

更接近原始版本的代码。方法map需要创建一个新的集合实例来生成结果,因此它会查找可以使用的implicit方法。然而,仅基于签名执行隐含的匹配,并且这样找到导致错误的两个候选者。我认为这是一个相当复杂的类和特征层次结构的结果,其中一些冗余没有消除。解决方法是明确提供构建方法,而不是依赖于implicits。