使用可变的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有什么问题?
答案 0 :(得分:3)
您可以使用
x.map(_ + 3)(BitSet.canBuildFrom)
更接近原始版本的代码。方法map
需要创建一个新的集合实例来生成结果,因此它会查找可以使用的implicit
方法。然而,仅基于签名执行隐含的匹配,并且这样找到导致错误的两个候选者。我认为这是一个相当复杂的类和特征层次结构的结果,其中一些冗余没有消除。解决方法是明确提供构建方法,而不是依赖于implicits。