2010-11-25 2 views
3

I ont la classe de base suivante:bornes de type Scala pour les méthodes varargs

trait Foo 
abstract class Bar[A <: Foo](f : A*) extends Foo 

Je veux créer ensuite une sous-classe:

case class Baz(f : Foo*) extends Bar(f) 

Cependant, quand je fais le compilateur se fâche, dit moi que:

arguments de type inférées [Seq [Foo]] ne sont pas conformes aux limites des paramètres de type de classe Bar [A <: Foo]

Ajout d'un paramètre de type explicite, tout comme dans

case class Baz(f : Foo*) extends Bar[Foo](f) 

se plaint alors d'une incompatibilité de type - trouvé Foo * en cas de besoin Foo.

À quoi cela cause-t-il? Comment dois-je contourner cela?

Répondre

7

écrit comme ci-dessus, le compilateur attend une séquence d'instances délimitée coma de type Foo comme arguments à cteur de Bar, alors qu'il est donné une seule instance de type Foo*, qui se traduit à un Seq[Foo] derrière la scène.

Faites ceci:

case class Baz(f : Foo*) extends Bar[Foo](f: _*) 

Voici comment les paramètres répétés sont passés autour entre toutes les méthodes, et pas seulement cteurs. Le ci-dessous fonctionnera alors aussi bien:

case class Baz(f : Foo*) extends Bar(f: _*) 
+0

Fonctionne un festin! Merci. – Submonoid