具有泛型类型的可变长度参数scala
variable length arguments with generic types 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
持有的操作接受可变长度的 A 类型参数?
一个例子:
def printAll(strings: String*) {
strings.foreach(println)
}
printAll
接收可变数量的字符串。
以同样的方式,我想让我的树持有 A* => A
类型的操作 op
。
一种可能的方法是让它接收 List[A]
,但我想知道是否有更直接的方法来做到这一点。
顺便问一下,我也可以将 branches: List[Tree[A]]
变成 branches: Tree[A]*
之类的东西吗?从设计的角度来看,这有意义吗?
你可以在签名中使用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 = ???
}
我有一个简单的抽象数据类型,一棵树。
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
接收可变数量的字符串。
以同样的方式,我想让我的树持有 A* => A
类型的操作 op
。
一种可能的方法是让它接收 List[A]
,但我想知道是否有更直接的方法来做到这一点。
顺便问一下,我也可以将 branches: List[Tree[A]]
变成 branches: Tree[A]*
之类的东西吗?从设计的角度来看,这有意义吗?
你可以在签名中使用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 = ???
}