Передать переменное число аргументов в классе случая scala (2.8) родительскому конструктору

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

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

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

2 ответа

Решение

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

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

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

Вам нужно использовать :_* синтаксис, который означает "обрабатывать эту последовательность как последовательность"! В противном случае ваша последовательность из 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)
Другие вопросы по тегам