Scala находит List и SeqProjection, когда требуется 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
Не могу понять, что с этим делать.
rndTrans
инициализируется следующим образом:
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)))
Обновление: я использую версию 2.7.
2 ответа
Решение
Когда toSet
метод (или toMap
) недоступен (поскольку выполняется более старая версия scala или преобразование просто не реализовано), часто можно применить одну из следующих схем.
val collection: Seq[SomeType] = ...
Set( collection: _* )
или же
Set() ++ collection
Первая версия использует :_*
преобразовать коллекцию в аргумент последовательности, а затем вызывает метод конструктора нового типа коллекции. Второй метод создал пустую коллекцию нового типа и затем добавляет (++
) старая коллекция к нему.
Как правило, Seq
это не Set
, Попробуйте преобразовать последовательность значений в набор.
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)