Я пытаюсь смоделировать DSL в Scala. (Я очень новичок в Scala, поэтому я мог бы пропустить что-то тривиальное, и в этом случае извинения). DSL поддерживает очень простую систему типов, где объекты, называемые «Термины», могут иметь тип, который по умолчанию расширяет Object
или может распространять другие типы, которые по своему праву в конечном итоге расширяют другой тип или Object
.Моделирование иерархии типов для DSL в Scala
Я пытаюсь смоделировать этот тип иерархию в Scala, используя тематический класс:
case class TermType(name: String, superType: TermType)
Однако, я хочу, чтобы иметь возможность поддержать дело «по умолчанию» (тот, где тип просто расширяет «Object '), без указания типа супер, поэтому что-то вроде:
//the following does not work, just illustrating what I want to achieve
case class TermType(name: String, superType: TermType = new TermType("Object", ???))
Не уверен, что это правильный подход. Я хочу избежать пометок нулей или подобных вещей. Я не знаю, будет ли путь Option
в некотором роде лучше (если он вообще работает).
Как лучше всего это сделать?
Спасибо, второй случай намного чище. Можно ли каким-либо образом поменять его на TermType («Объект») вместо «Нет»? но объект SuperType объекта должен быть None. – jbx
Основываясь на том, что вы предложили, было бы что-то в этом смысле? 'case class TermType (name: String, superType: Option [TermType] = Some (TermType (« Object », None)))' – jbx
Я лично не вижу преимуществ при создании умолчаний. Еще один шаг вперед в иерархии, но может быть вашим приложение необходимо по умолчанию на «сложных» листовых узлах. Это будет довольно легко изменить позже, если вы не будете полностью удовлетворены, поэтому выберите один подход и поработайте над ним :). –