开发者

pass variable number of arguments in scala (2.8) case class to parent constructor

开发者 https://www.devze.com 2022-12-10 19:55 出处:网络
I was experimenting with variable constructor arguments for case classes in Scala, but am unable to pa开发者_开发知识库ss them to the constructor of a case classes\' parent:

I was experimenting with variable constructor arguments for case classes in Scala, but am unable to pa开发者_开发知识库ss them to the constructor of a case classes' parent:

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

the above doesn't compile... is it actually possible to do this?


You need to use the :_* syntax which means "treat this sequence as a sequence"! Otherwise, your sequence of n items will be treated as a sequence of 1 item (which will be your sequence of n items).

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)


This works with 2.7:

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

Should work with 2.8.

0

精彩评论

暂无评论...
验证码 换一张
取 消