Scala 在抽象类中要求子类型是有序的
我正在用Scala做一个基本的图形表示Scala 在抽象类中要求子类型是有序的,scala,Scala,我正在用Scala做一个基本的图形表示 abstract class Vertex class Edge ( val source: Vertex val dest: Vertex ) class Graph[V <: Vertex] { ... } 更新:也许图形的构造函数需要进行排序[V] 更新:我总是可以限制V 更新:也许图形的构造函数需要进行排序[V] 这将是我首选的方法,因为如果需要,您可以通过这种方式传递不同的排序 更新:我总是可以限制V为什么不设计图形类来包含顶
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]]
我认为后一种解决方案的另一个问题是,如果我有另一个类(比如一个classPath
,它表示通过图形的路径)具有相同的类型限制。如果我需要添加另一个限制,我需要修改所有这些类。:排序要求V
对V
的排序有一个隐式定义?我将详细阅读这个语法。我重新编写了我的代码,结果证明我真正需要的是一个函数来合并节点List(V)=>V
,到目前为止,我认为函数中的一个隐式参数是最简单的。感谢另一个很棒的答案,它给了我更多的选择。我的顶点是一个泛型类,排序定义将是泛型子类型的函数,而不是抽象的超类型,所以我不能用<代码>图< /C>来定义比较函数。
class Graph[V <: Vertex with Ordered[V]]
class Graph[V <: Vertex : Ordering]