Scala et trouvé Liste SeqProjection, lorsque cela est nécessaire et Seq Set
Question
Assis avec l'erreur suivante:
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: J'arrive d'utiliser la version 2.7
.La solution
Quand 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 le :_*
pour convertir la collection à un argument de séquence et appelle une méthode constructeur du nouveau type de collection. La deuxième méthode a créé une collection vide du nouveau type et ajoute (++
) l'ancienne collection à elle.
Autres conseils
En général, une Seq
n'est pas un Set
. Essayez de convertir la séquence de valeurs d'un 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)