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有什么问题?
您可以使用
x.map(_ + 3)(BitSet.canBuildFrom)
Run Code Online (Sandbox Code Playgroud)
这更接近原始版本的代码。该方法map需要创建一个新的集合实例来生成结果,因此它会寻找一个implicit可以使用的方法。然而,隐式匹配仅基于签名进行,这样会找到两个候选者,从而导致错误。我认为这是相当复杂的类和特征层次结构的结果,其中一些冗余没有被消除。解决方法是显式提供构建方法,而不是依赖隐式方法。
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |