2010-11-18 51 views
0

,出現以下錯誤坐位時:斯卡拉發現列表和SeqProjection,需要序列和設置

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版是。

+0

請注意,您使用的是2.7 ...(我們應該有一個標籤,而不是現在的scala-2.8標籤。) – Debilski 2010-11-18 20:02:38

+0

抱歉...我沒有意識到這兩個版本是如此不同。 – aioobe 2010-11-18 20:04:33

+0

關於它們的集合。你也許應該安裝sbt讓scala 2.8輕鬆運行。 – Debilski 2010-11-18 20:05:55

回答

4

toSet方法(或toMap)不可用(因爲一個正在運行的Scala的舊版本或者因爲轉換隻是沒有實現),經常可以採用下列方案之一。

val collection: Seq[SomeType] = ... 

Set(collection: _*) 

Set() ++ collection 

第一個版本使用:_*到集合轉換成一個序列的參數,然後調用新的集合類的構造方法。第二種方法創建了一個新類型的空集合,然後向其添加舊集合(++)。

+1

謝謝!(我明天起來,我今天用完了upvotes) - : – aioobe 2010-11-18 20:16:59

+0

沒問題:) – Debilski 2010-11-18 20:21:25

2

通常,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) 
+0

我得到了'error:value toSet不是Seq.Projection [State]的成員' – aioobe 2010-11-18 19:44:22