Scala gefunden Liste und SeqProjection bei Bedarf Seq und Set
Frage
Sitze mit dem folgenden Fehler:
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
Kann nicht herausfinden, was zu tun ist.
Die rndTrans
initialisiert wird, wie folgt:
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)))
Update: ich zufällig mit der Version 2.7 wird
.Lösung
Wenn eine toSet
Methode (oder toMap
) nicht verfügbar ist (weil man eine ältere Version von scala läuft oder weil die Umwandlung ist einfach nicht implementiert), kann man oft eine der folgenden Regelungen gilt.
val collection: Seq[SomeType] = ...
Set( collection: _* )
oder
Set() ++ collection
Die erste Version verwendet die :_*
die Sammlung zu einer Sequenz Argument zu konvertieren und ruft dann einen Konstruktor des neuen Kollektion Typs. Die zweite Methode erstellt eine leere Auflistung des neuen Typs und fügt dann hinzu (++
) die alte Sammlung zu.
Andere Tipps
Im Allgemeinen wird eine Seq
ist kein Set
. Versuchen Sie, die Wertfolge auf einen Satz zu konvertieren.
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)