2
我要創建簡單的DSL申報樹:如何實現在Scala中聲明樹的簡單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也是允許的(這個語法並不嚴格,這正是我想到的)。
'{節點(4),節點(5),節點(6)}' - 例如語法並不代表Scala中的任何東西,它顯然不正確。 – ghik
只要堅持括號,你可能會發現有用的閱讀本:http://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and -什麼時候 –