9

Scalaでケースクラスの変数コンストラクター引数を試していましたが、ケースクラスの親のコンストラクターにそれらを渡すことができません。

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

上記はコンパイルされません...実際にこれを行うことは可能ですか?

4

2 に答える 2

21

「このシーケンスをシーケンスとして扱う」:_*という意味の構文を使用する必要があります。それ以外の場合、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)
于 2009-11-02T11:38:01.873 に答える
8

これは2.7で動作します:

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

2.8で動作するはずです。

于 2009-11-02T11:15:56.107 に答える