传递阶可变数量的参数(2.8)的情况下类父构造(pass variable number of ar

2019-09-03 23:05发布

我是用变量构造函数参数在斯卡拉情况下试验班,但我无法将它们传递给一个case类的父的构造函数:

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

上面没有编译...它实际上是有可能做到这一点?

Answer 1:

这适用于2.7:

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

应与2.8工作。



Answer 2:

您需要使用:_*语法,意思是“把这个序列作为序列”! 否则,你的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)


文章来源: pass variable number of arguments in scala (2.8) case class to parent constructor