scala自定义可遍历的Seq[A]

scala自定义可遍历的Seq[A],scala,generics,scala-collections,Scala,Generics,Scala Collections,我试图使我的图实现其边的可遍历性。 我有一种称为edge[Node,EdgeType]的边。 我的优势是最后的案例课。 代码如下所示: class Graph[Node, Type] extends Traverasble[Edge[Node, Type]] 我看到了关于创建自定义可遍历的,但我无法使其工作。 我的图形知道它的元素、边,但不知道它的参数类型、节点和边类型。我无法让工厂理解那些仿制药 object Graph extends TraversableFactory[Graph] {

我试图使我的图实现其边的可遍历性。 我有一种称为edge[Node,EdgeType]的边。 我的优势是最后的案例课。 代码如下所示:

class Graph[Node, Type] extends Traverasble[Edge[Node, Type]]
我看到了关于创建自定义可遍历的,但我无法使其工作。 我的图形知道它的元素、边,但不知道它的参数类型、节点和边类型。我无法让工厂理解那些仿制药

object Graph extends TraversableFactory[Graph] {
    implicit def canBuildFrom[A<:Edge[_,_]]: CanBuildFrom[Coll, A, Graph[_]] = new GenericCanBuildFrom[A]
    def newBuilder[A<:Edge[_,_]] = new ListBuffer[A] mapResult (x => new Graph(x:_*))
}
对象图扩展了TraversableFactory[图]{

隐式def canBuildFrom[A不清楚通过实现自定义
TraversableFactory
您试图实现什么。这些机制支持通用集合,即可以存储任意类型的元素的集合。这一点很重要,因为支持的方法包括可以更改元素类型的方法,例如
.map
。以下代码中的
intCol
map
的预期类型是什么:

val graph: Graph[SomeNode, SomeType] = ???
val intCol = graph.companion.empty[Int]
val mapped = graph.map(edge => 42) // yes fixed value just for an example
intCol
mapped
肯定应该是
Traversable[Int]
的某些子类型。您可以
Graph
表示这样的对象吗?如果不可以,那么您的
Graph
不是通用集合,不应该有自定义的
同伴
TraversableFactory
对象


另外,由于您没有提供任何关于您真正想要实现的目标的描述,因此很难猜测,但您真正想要的可能是继承自
TraversableLike
(或
IterableLike
)而不是
TraversableLike
。主要区别在于
TraversableLike
没有定义
companion
,因此只能代表一种类型的特定集合。

非常感谢!看起来我跳得太远了,我只需要像你说的那样实现TraversableLike或IterableLike。这真的让人困惑“喜欢”和“不喜欢”集合。