2010-11-18 3 views
0

Assis avec l'erreur suivante:Scala et trouvé Liste SeqProjection, lorsque cela est nécessaire et Seq Set

TestCaseGenerator.scala:47: error: type mismatch; 
found : List[(State, Seq.Projection[State])] 
required: Seq[(State, Set[State])] 
    new LTS(Map(rndTrans: _*), Map(rndLabeling: _*)) 
       ^
one error found 

ne peuvent pas comprendre ce qu'il faut faire à ce sujet.

Le rndTrans est initialisé comme suit:

val rndTrans = for (s <- (0 to nStates).toList) 
        yield (new State(s) -> (for (s2 <- 0 to nStates 
         if prob(trans_probability)) 
          yield new State(s2))) 

Mise à jour: Je suis d'utiliser la version 2.7.

+0

Veuillez mentionner que vous utilisez 2.7 ... (Nous devrions avoir un tag pour celui-ci au lieu de l'étiquette scala-2.8 de nos jours.) – Debilski

+0

Désolé à ce sujet ... Je ne savais pas que les deux versions sont si différentes . – aioobe

+0

En ce qui concerne les collections, ils sont. Vous devriez peut-être installer sbt pour que scala 2.8 fonctionne facilement. – Debilski

Répondre

4

Lorsqu'une méthode toSet (ou toMap) ne sont pas disponibles (parce que l'un est en cours d'exécution d'une ancienne version de scala ou parce que la conversion est tout simplement pas mis en œuvre), on peut souvent appliquer l'un des régimes suivants.

val collection: Seq[SomeType] = ... 

Set(collection: _*) 

ou

Set() ++ collection 

La première version utilise la :_* pour convertir la collection à un argument de séquence et appelle une méthode constructeur du nouveau type de collection. La seconde méthode a créé une collection vide du nouveau type et y ajoute (++) l'ancienne collection.

+1

Merci! (Je vais upvote demain, j'ai épuisé des upvotes aujourd'hui) -: – aioobe

+0

Aucun problème du tout :) – Debilski

2

Généralement un Seq n'est pas un Set. Essayez de convertir la séquence de valeur en ensemble.

val rndTrans = for (s <- (0 to nStates).toList) 
        yield (new State(s) -> (for (s2 <- 0 to nStates 
         if prob(trans_probability)) 
          yield new State(s2)).toSet) 
+0

Je reçois 'error: value toSet n'est pas un membre de Seq.Projection [État]' – aioobe

Questions connexes