Domanda

Stavo sperimentando con argomenti del costruttore variabile per classi case a Scala, ma sono in grado di passarli al costruttore del genitore un caso di classi:

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

È possibile che questo non compila ... è effettivamente possibile fare questo?

È stato utile?

Soluzione

Questo funziona con 2.7:

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

Dovrebbe funzionare con 2.8.

Altri suggerimenti

È necessario utilizzare il :_* la sintassi che significa "trattare questa sequenza come una sequenza" ! In caso contrario, la sequenza di n elementi sarà trattata come una sequenza di 1 articolo (che sarà la vostra sequenza di n elementi).

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top