Я пытаюсь создать BNF-подобную DSL в Swift. В Scala gll-combinators имеет хороший подход:Как определить рекурсивные структуры данных в Swift
lazy val expr: Parser[Any] = (
"(" ~ expr ~ ")" ^^ { _ + _ + _ }
| ""
)
Это создает парсер, который ссылается на себя.
Когда я пытаюсь сделать то же самое в Swift (используя lazy var
в классе или @autoclosure
в функции), я получаю ошибку «Переменная, используемая в пределах своего собственного начального значения».
В простом примере
class Node {
private var node: Node
init(node: Node) { self.node = node }
}
Я хочу, чтобы создать узел с его членом node
указывая на self
.
lazy var node = Node(node) // error
Есть ли способ вокруг?
Пожалуйста, покажите некоторый фактический код Swift и объясните, что вы хотите с ним сделать. – matt