передать переменное число аргументов в классе случая scala (2.8) родительскому конструктору - PullRequest
9 голосов
/ 02 ноября 2009

Я экспериментировал с аргументами конструктора переменных для case-классов в Scala, но не могу передать их конструктору родительского класса case:

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

вышесказанное не компилируется ... возможно ли это сделать?

Ответы [ 2 ]

20 голосов
/ 02 ноября 2009

Вам необходимо использовать синтаксис :_*, что означает «обрабатывать эту последовательность как последовательность» ! В противном случае ваша последовательность из 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)
8 голосов
/ 02 ноября 2009

Это работает с 2.7:

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

Должен работать с 2.8.

...