我正在为Scala中的case类试验变量构造函数参数,但是无法将它们传递给case类的父类的构造函数:
abstract case class Node(val blocks: (Node => Option[Node])*)
case class Root(val elementBlocks: (Node => Option[Node])*) extends Node(elementBlocks)
上面没有编译......实际上可以这样做吗?
答案 0 :(得分:20)
您需要使用 :_*
语法,这意味着“将此序列视为序列”!否则,您的n个项目序列将被视为1个项目的序列(这将是您的n个项目的序列)。
def funcWhichTakesSeq(seq: Any*) = println(seq.length + ": " + seq)
val seq = List(1, 2, 3)
funcWhichTakesSeq(seq) //1: Array(List(1, 2, 3)) -i.e. a Seq with one entry
funcWhichTakesSeq(seq: _*) //3: List(1, 2, 3)
答案 1 :(得分:8)
这适用于2.7:
abstract case class A(val a: String*)
case class B(val b: String*) extends A(b:_*)
应该使用2.8。