如何从scala集合中检索构建器,使其无法实现?我已经将参数类型限制为TraversableLike的后代,但它的newBuilder方法受到保护,我无法从外部调用它。
答案 0 :(得分:4)
通过隐式CanBuildFrom
的使用来检索构建器,它基于以下参数自动解析:
例如,如果您在返回_.toString
的List [Int]上执行地图,则CanBuildFrom
将显示以下内容:
CanBuildFrom[List,Int,List[String]]
您应该依赖相同的机制来动态检索所需的正确构建器。
答案 1 :(得分:3)
代码段有助于提供一些背景信息。你提到“论证类型”......
无论是什么声明这个论点,它都有Repr
的类型参数吗?喜欢
def mysteryMethod[A, Repr](arg: TraversableLike[A, Repr]): Builder[A, Repr]
假设你可以这样做:
import collection.TraversableLike
import collection.mutable.Builder
import collection.generic.CanBuildFrom
def mysteryMethod[A, Repr](arg: TraversableLike[A, Repr])(implicit
cbf: CanBuildFrom[Repr, A, Repr]): Builder[A, Repr] = cbf.apply
val t: TraversableLike[Int, Vector[Int]] = Vector(1, 2)
val builder = mysteryMethod(t)
builder += 3
builder += 4
builder.result //> res2: Vector[Int] = Vector(3, 4)