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)
Другие вопросы по тегам