[英]Dependent classes and types
假設我想創建一個簡單的圖形表示形式,其中Vertex
和Edge
及其類型相互依賴。 一個具體的實現可能看起來像這樣:
case class Edge(id: Int, label: String, endpoints: (Vertex, Vertex))
case class Vertex(id: Int, data: Data, edges: Map[Int, Edge])
Edge
取決於Vertex
,反之亦然。 我真正想要的是id
, data
等具有通用類型。 我不知道如何設計最佳方法?
trait Vertex[A, B] {
def id: A
def data: B
// What about types for the edges etc?
}
trait Edge[A, ...] {
def id: A
def label: String
def endpoints: (Vertex[...], Vertex[...])
}
一個簡單的例子將不勝感激。
重新使用類型參數有什么問題?
trait Vertex[A, B] {
def id: A
def data: B
def edges: Map[A, Edge[A, B]]
}
然后在Edge
:
trait Edge[A, B] {
def id: A
def label: String
def endpoints: (Vertex[A, B], Vertex[A, B])
}
由於Vertex和Edge可以具有不同的ID類型,因此您可能希望將Vertex和Edge作為具有所有類型參數的Graph特征的內部特征。 這樣,Vertex可以知道Edge特征的ID類型,而Edge可以知道Vertex特征的ID和數據類型。
trait Graph[VertexID, EdgeID, Data] {
trait Vertex {
def id: VertexID
def data: Data
def edges: Map[EdgeID, Edge]
}
trait Edge {
def id: EdgeID
def label: String
def endpoints: (Vertex, Vertex)
}
}
順便說一句,由於與路徑有關的類型,Edge將只能具有同一圖形中的端點,而Vertex將只能具有同一圖形中的邊緣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.