Я хочу создать простой DSL объявить деревья:Как реализовать простую DSL для объявления деревьев в Scala?
1
/\
2 3
/|\
4 5 6
Маршрутизатор DSL должен выглядеть примерно так:
val node = Node(1) {
Node(2),
Node(3) {
Node(4),
Node(5),
Node(6)
}
}
Это то, что я достиг до сих пор:
case class Node(id: Int, childNodes: List[Node] = Nil) {
def apply(nodes: Node*): Node = copy(childNodes = nodes.toList)
}
Однако, декларация дерева выше не компилируется. В нем говорится:
';' как ожидается, но «» найдено
Если изменить фигурные скобки в круглые скобки, это работает:
val node = Node(1) (
Node(2),
Node(3) (
Node(4),
Node(5),
Node(6)
)
)
Но я думаю, что это немного более интуитивным использовать фигурные скобки, потому что они напоминают иерархическую декларацию классов в ООП.
Любые рекомендации, чтобы заставить его работать? Изменение DSL также допустимо (этот синтаксис не является строгим, это только то, что мне пришло в голову).
'{Node (4), узел (5), узел (6)}' - такие Синтаксис ничего не значит в Scala, это просто неверно. – ghik
Просто придерживайтесь круглых скобок, и вам может показаться полезным прочитать это: http://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and -когда –