У меня есть простой абстрактный тип данных, дерево.аргументы переменной длины с общими типами scala
sealed trait Tree[A]
case object EmptyTree extends Tree[Nothing]
case class Leaf[A](value: A) extends Tree[A]
case class Node[A](op: A => A, branches: List[Tree[A]]) extends Tree[A]
Как я могу сделать операцию, что Node
держит принимать переменное число длины аргументов типа А?
Exemple:
def printAll(strings: String*) {
strings.foreach(println)
}
printAll
принимает переменное число строк.
Точно так же я хотел, чтобы мое дерево удерживало операцию op
типа A* => A
.
Возможным способом было бы заставить его получить List[A]
, но я задаюсь вопросом, нет ли более прямого способа сделать это.
кстати может я также превратить branches: List[Tree[A]]
в нечто вроде branches: Tree[A]*
. Это имеет смысл с точки зрения дизайна?
собирается проверить это, это имеет смысл, чем вы за ваш ответ –
, кстати, могу я также сделать 'branch: List [Tree [A]])' like 'branches: Tree [A] *'. Это имеет смысл с точки зрения дизайна? –
varargs имеет смысл, если вы хотите иметь функцию, которая принимает n элементов в качестве параметра, но это имеет меньшее значение, когда вы объявляете поля класса. Но это зависит от вас, чтобы использовать его. – Mikel