У меня есть нормальное дерево, определенное в Scala.Расширение существующей структуры данных в Scala
sealed abstract class Tree
object Tree {
case class Node (...) extends Tree
case class Leaf (...) extends Tree
}
Теперь я хочу добавить переменную-член ко всем узлам и листьям в дереве. Возможно ли это с помощью ключевого слова extend или мне нужно изменить древовидные классы, добавив [T]?
Update:
Кажется, что мой вопрос был неправильно понят. Пример должен очистить его:
Мне нужна эта структура дерева (на самом деле что-то более сложная) имеет два двойника в одном контексте. В другом контексте мне нужно, чтобы у него была одна строка. И все же в другом контексте мне нужно чистое дерево без каких-либо (дополнительных) членов. И я хотел бы сначала два варианта: be третий вариант. псевдокод:
DTree extends Tree with Touple2[Double, Double]
object DTree {
case class Node (...) extends Tree.Node with Touple2[Double, Double]
case class Leaf (...) extends Tree.Leaf with Touple2[Double, Double]
}
STree extends Tree with String
object DTree {
case class Node (...) extends Tree.Node with String
case class Leaf (...) extends Tree.Leaf with String
}
...
def f (t : Tree) { ... }
Я хочу е, чтобы иметь возможность обрабатывать все деревья.
Вы изменили класс дерева. Я хочу избежать этого, поскольку он используется во многих местах, и мне нужно больше богатого дерева только в одном месте. –
@ Łukasz Lew: Затем введите новый слой в структуре наследования, который служит для захвата этого различия и поместите общие элементы в один из (абстрактных) классов на этом уровне. –