如何从不知道它的实现的 scala 集合中检索构建器?我已将参数类型限制为 TraversableLike 的后代,但它的 newBuilder 方法受到保护,我不能从外部调用它。
问问题
107 次
2 回答
4
生成器是通过使用CanBuildFrom
隐式检索的,它会根据以下参数自动解析:
- 输入集合中的元素类型
- 输入集合的类型
- 输出集合的合适类型。
例如,如果您在返回的 List[Int] 上执行映射_.toString
,CanBuildFrom
则将如下所示:
CanBuildFrom[List,Int,List[String]]
您应该依靠相同的机制来动态检索您需要的正确构建器。
于 2013-03-20T06:13:32.953 回答
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)
于 2013-03-20T06:13:58.430 回答