2013-05-08 3 views
0

У меня есть следующее определение перечисления:Scala - расходящиеся неявное расширение при использовании toMap

object GraphType extends Enumeration { 
    type Type = Value 
    val MESSAGE, REQUEST, ERRORS = Value 
} 

Теперь я пытаюсь отобразить каждый из типов в соответствующий, новый TimeSeries следующим образом:

val dataSets = (GraphType.values map (graphType => graphType -> new TimeSeries(graphType))).toMap 

система типов перечисляет наборы данных как Map[GraphType.Value, TimeSeries], что и есть то, что я хочу. Однако, компиляция завершается с сообщением об ошибке:

error: diverging implicit expansion for type scala.collection.generic.CanBuildFrom[ird.replay.gui.GraphType.ValueSet,(ird.replay.gui.GraphType.Value, org.jfree.data.time.TimeSeries),That] 
starting with method newCanBuildFrom in object SortedSet 
val dataSets = GraphType.values map (graphType => graphType -> new TimeSeries(graphType)) toMap 

кто-то может предоставить некоторые объяснения для этого, довольно загадочно, сообщение об ошибке? Благодаря

+0

Возможный дубликат [Перечисление и сопоставление с помощью Scala 2.10] (http://stackoverflow.com/questions/9487425/enumeration-and-mapping-with-scala-2-10) – QuidNovi

ответ

2

Try преобразования набора значений для перечисления в List первый так:

val dataSets = (GraphType.values.toList.map(gt => (gt, new TimeSeries(gt)))).toMap 

Кое-что о том, что будучи Set не согласен с тем, как вы пытаетесь преобразовать его в Map, но он работает нормально с List

+0

Это потому, что enum.values ​​теперь является ** Sorted ** Set. Проблема не связана с преобразованием «toMap», но происходит раньше с помощью функции map на SortedSet: ее вывод (здесь, по-видимому, TimeSeries) не может быть отсортирован. Следовательно, ошибка. – QuidNovi

Смежные вопросы