我想创建简单的 DSL 来声明树:
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)
)
)
但我认为使用花括号更直观一点,因为它们类似于 OOP 中类的层次声明。
有什么建议可以让它发挥作用吗?更改 DSL 也是允许的(这种语法并不严格,这正是我想到的)。