我想建模一个简单的图形,其中每个节点都连接到另一个节点。
这似乎是给定场景的节点的合理定义:
case class Node(other: Node)
但是我想创建一个如下所示的图表:
--------------
| |
node_a V
^ node_b
| |
--------------
考虑到Node
的定义,似乎无法创建这样的图形,因为other
是不可变的,需要在创建时分配,但不可能同时创建两个节点。
我想我可以存储另一个节点的名称:
case class Node(name: String, otherName: String)
...
val n1 = Node("a", "b")
val n2 = Node("b", "a")
val nodes = Map(n1.name -> n1, n2.name -> n2)
这需要为每个节点生成唯一标识符的附加步骤。这并不可怕,但我真的很喜欢使用节点本身直接遍历图表的优雅,而不是n.other
la nodes.get(n.other)
。
我在这里寻找不可能的事吗?
答案 0 :(得分:0)
2011年的这个问题有一个很好的答案,暗示了使用懒惰的黑客行为:Scala: circular references in immutable data types?