我有一个简单的抽象数据类型,一棵树。
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
持有的操作以接受类型A的可变长度数量的参数?
一个例子:
def printAll(strings: String*) {
strings.foreach(println)
}
printAll
收到可变数量的字符串。
以同样的方式,我想让我的树持有op
类型的操作A* => A
。
一种可能的方法是让它收到List[A]
,但我想知道是否有更直接的方式来做到这一点。
顺便说一下,我还可以将branches: List[Tree[A]]
转换为branches: Tree[A]*
之类的内容。从设计角度来看这是否有意义?
答案 0 :(得分:3)
您可以在签名中使用Seq,然后您就可以传递varargs函数
sealed trait Tree[A]
case object EmptyTree extends Tree[Nothing]
case class Leaf[A](value: A) extends Tree[A]
case class Node[A](op: Seq[A] => A, branches: List[Tree[A]]) extends Tree[A]
object Test {
Node[String](test[String], List())
def test[A](elem: A*): A = ???
}