9

我在 Scala 中试验案例类的可变构造函数参数,但无法将它们传递给案例类父级的构造函数:

abstract case class Node(val blocks: (Node => Option[Node])*)
case class Root(val elementBlocks: (Node => Option[Node])*) extends Node(elementBlocks)

以上不编译...实际上可以这样做吗?

4

2 回答 2

21

您需要使用表示“将此序列视为序列”:_*的语法!否则,您的 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)
于 2009-11-02T11:38:01.873 回答
8

这适用于 2.7:

abstract case class A(val a: String*)
case class B(val b: String*) extends A(b:_*)

应该与 2.8 一起使用。

于 2009-11-02T11:15:56.107 回答