Добрый день! Я пытаюсь построить неизменный граф в 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
представляет график на всех (он также может быть отключен один) Кроме того, если это важно, я может ограничивать график без циклов.
Так что мои основные вопросы:
- Поскольку узлы (
trait BO
) могут быть довольно сложными объектами и могут быть реализованы с несколькими подтипами, что это лучший способ для реализации «разрешенных узлов» - то есть узлы с прямыми ссылками к другим узлам? (BO with ResolvedBO
). - Если решают узлы сами по себе, это лучший способ (
lazy val r_attr_bo: Seq[BO with ResolvedBO] = attr_bo map (uni.m_list_r(_))
вtrait ResolvedBO
), как я могу инициализировать ссылку на график (val uni: Universe
) вtrait ResolvedBO
? - На самом деле, как лучше всего работать с графоподобными структурами в Scala?
спасибо
Ну, мне нужна только очень простая функциональность из такой библиотеки графов, поэтому рассмотрим возможность ее реализации самостоятельно. Но спасибо за указание на scalax-graph – newf