【发布时间】:2016-04-09 10:10:58
【问题描述】:
我正在尝试通过implicit class 拉皮条向Traversable trait 添加一些方法。
但我有点迷失CanBuildFrom trait。考虑以下几点:
implicit class TraversableExt[+A, +Repr <: Traversable[A]](traversable: Repr) {
def debug[That](name: String)(implicit bf: CanBuildFrom[Repr, A, That]): That =
traversable.map{ a => println(name + ": " + a); a }(bf)
}
这失败并出现错误:
错误:(21, 59) 类型不匹配;
找到:scala.collection.generic.CanBuildFrom[Repr,A,That]
必需:scala.collection.generic.CanBuildFrom[Traversable[A],A,That]
traversable.map{ a => println(name + ": " + a);一个}(bf) ^
我猜因为CanBuildFrom[-Repr, -Elem, +To] 中的Repr 是逆变的,因此我的Repr 是Traversable[A] 的上限可能不起作用。
但总的来说,我很迷茫。有人可以帮忙吗?
【问题讨论】: