Scala находит List и SeqProjection, когда требуется Seq и Set - PullRequest
0 голосов
/ 18 ноября 2010

Сидит со следующей ошибкой:

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 ]

4 голосов
/ 18 ноября 2010

Если метод toSet (или toMap) недоступен (поскольку выполняется более старая версия scala или преобразование просто не реализовано), часто можно применить одну из следующих схем.

val collection: Seq[SomeType] = ...

Set( collection: _* )

или

Set() ++ collection

Первая версия использует :_* для преобразования коллекции в аргумент последовательности, а затем вызывает метод конструктора нового типа коллекции. Второй метод создает пустую коллекцию нового типа, а затем добавляет (++) старую коллекцию в нее.

2 голосов
/ 18 ноября 2010

Обычно 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)
...