将map方法应用于Scala中的BitSet

pro*_*eek 6 scala bitset scala-collections

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

val x = BitSet()
x.add(10); x.add(20)
x.map(_ + 3)
Run Code Online (Sandbox Code Playgroud)

这是消息.

<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)
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ski 4

您可以使用

x.map(_ + 3)(BitSet.canBuildFrom)
Run Code Online (Sandbox Code Playgroud)

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