【发布时间】:2012-04-11 02:26:10
【问题描述】:
美好的一天!我正在尝试在 Scala 2.9.1 中构建不可变图。
它是通过Seq[BO] 提供给我的,其中BO 可以代表图中的一个节点,BO.attr_bo: Seq[String] 代表其他节点的边,由字符串名称给出。我需要构建“已解析”图,由BO with ResolvedBO 表示
你可以在这里看到可能的实现:
trait BO {
def name: String
def attr_bo: Seq[String]
}
trait ResolvedBO {
x: BO =>
val uni: Universe
lazy val r_attr_bo: Seq[BO with ResolvedBO] = attr_bo map (uni.m_list_r(_))
}
class S_BO(val name: String, val attr_bo: Seq[String]) extends BO
class Universe(list: Seq[BO]) {
val m_list: Map[String, BO] = list.map(x => (x.name, x))(collection.breakOut)
val m_list_r: Map[String, BO with ResolvedBO] = ...???
}
val x: Uni = new Uni(Seq(new S_BO("a", Seq("b", "c")), new S_BO("b", Seq("a", "c")), new S_BO("c", Seq("a", "b"))))
其中class Universe根本就代表graph(也可以断开一个)
另外,如果它很重要,我可以限制图形没有循环。
所以我的主要问题:
- 由于节点 (
trait BO) 可以是相当复杂的对象,并且可以通过多种子类型来实现,那么实现“已解析节点”的最佳方式是什么 - 即直接链接到其他节点的节点? (BO with ResolvedBO)。 - 如果自己解析节点是最好的方法(
trait ResolvedBO中的lazy val r_attr_bo: Seq[BO with ResolvedBO] = attr_bo map (uni.m_list_r(_))),我如何在trait ResolvedBO中初始化图的引用(val uni: Universe)? - 在 Scala 中使用类图结构的最佳方式是什么?
谢谢
【问题讨论】:
标签: scala graph immutability