Scala 在抽象类中要求子类型是有序的

Scala 在抽象类中要求子类型是有序的,scala,Scala,我正在用Scala做一个基本的图形表示 abstract class Vertex class Edge ( val source: Vertex val dest: Vertex ) class Graph[V <: Vertex] { ... } 更新:也许图形的构造函数需要进行排序[V] 更新:我总是可以限制V 更新:也许图形的构造函数需要进行排序[V] 这将是我首选的方法,因为如果需要,您可以通过这种方式传递不同的排序 更新:我总是可以限制V为什么不设计图形类来包含顶

我正在用Scala做一个基本的图形表示

abstract class Vertex
class Edge (
  val source: Vertex
  val dest: Vertex
)
class Graph[V <: Vertex] {
  ...
}
更新:也许
图形的构造函数需要进行
排序[V]

更新:我总是可以限制
V
更新:也许
图形的构造函数需要进行
排序[V]

这将是我首选的方法,因为如果需要,您可以通过这种方式传递不同的
排序


更新:我总是可以限制
V为什么不设计
图形
类来包含
顶点
对象的
列表
?然后,您可以使用List的方便的内置
sortWith
方法

例如:

class Graph(val Vertices:List[Vertex]) {
  def sorted():Graph = {
    new Graph(Vertices.sortWith((v1, v2) => { /* your comparison logic here */ }))
  }
}
希望这能为你指明正确的方向。

为什么不只是这个

class Graph[V <: Vertex with Ordered[V]]

我认为后一种解决方案的另一个问题是,如果我有另一个类(比如一个class
Path
,它表示通过图形的路径)具有相同的类型限制。如果我需要添加另一个限制,我需要修改所有这些类。
:排序要求
V
V
排序有一个隐式定义?我将详细阅读这个语法。我重新编写了我的代码,结果证明我真正需要的是一个函数来合并节点
List(V)=>V
,到目前为止,我认为函数中的一个隐式参数是最简单的。感谢另一个很棒的答案,它给了我更多的选择。我的顶点是一个泛型类,排序定义将是泛型子类型的函数,而不是抽象的超类型,所以我不能用<代码>图< /C>来定义比较函数。
class Graph[V <: Vertex with Ordered[V]]
class Graph[V <: Vertex : Ordering]