如果有针对性的Edge实现如下:
class EdgeImpl(origin: Node, dest: Node) {
def from = origin
def to = dest
}
那么在我们创建新undirected Edge
时实现Edge
的区别是什么呢?我们在两种情况下都要说:new EdgeImpl(node1, node2)
?我没有得到实施的差异:(
我更具体地分析了这个example
答案 0 :(得分:2)
Edge的实现没有实际区别,在这两种情况下,只需要指定两个连接的节点。
当你想要实现边缘含义需要解释的其他东西时,会弹出差异。例如,如果你有一个方法areConnected(a: Node, b: Node): Boolean
,那么它的实现将遍历边缘列表,如果在有向图中,如果from == a && to == b
则返回true。无向版本将评估(from == a && to == b) || from == b && to == a)
。
这个例子有点复杂,并不清楚为什么真正需要描述的功能,但考虑如何创建WeightedDirectedGraph,其中每条边还包含连接节点之间的权重或距离。