passar número variável de argumentos em scala (2,8) classe caso de construtor pai
-
11-09-2019 - |
Pergunta
Eu estava experimentando com argumentos do construtor variáveis ??para classes de caso em Scala, mas sou incapaz de passá-los para o construtor do pai um caso classes':
abstract case class Node(val blocks: (Node => Option[Node])*)
case class Root(val elementBlocks: (Node => Option[Node])*) extends Node(elementBlocks)
acima não compilar ... é realmente possível fazer isso?
Solução
Isso funciona com 2.7:
abstract case class A(val a: String*)
case class B(val b: String*) extends A(b:_*)
deve funcionar com 2.8.
Outras dicas
Você precisa usar o :_*
sintaxe que meios "tratar essa seqüência como uma seqüência" ! Caso contrário, sua seqüência de n itens serão tratados como uma seqüência de 1 item (que será a sua seqüência de n itens).
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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow