Enumeration and mapping with Scala 2.10
我正在尝试将我的应用程序移植到Scala 2.10.0-M2。 我看到了一些不错的改进,编译器发出了更好的警告。 但是我也遇到了很多错误,所有错误都与
我举一个简单的例子。 我想进行枚举,然后预先创建一堆对象,并构建一个使用枚举值作为键,然后将一些匹配的对象用作值的地图。 例如:
1 2 3 4 5 6 7 8 9 10 11 |
现在,这在Scala 2.8和2.9上可以正常工作。 但是2.10.0-M2给我以下警告:
1 2 3 4 | [ERROR] common/Test.scala:21: error: diverging implicit expansion for type scala.collection.generic.CanBuildFrom[common.Phrase.ValueSet,(common.Phrase.Value, common.Entity),That] [INFO] starting with method newCanBuildFrom in object SortedSet [INFO] val myMapWithPhrases = Phrase.values.map(p => (p -> new Entity(p.toString))).toMap ^ |
是什么原因造成的,以及如何解决?
这基本上是类型不匹配的错误。 您可以通过首先将is转换为列表来解决:
1 2 | scala> Phrase.values.toList.map(p => (p, new Entity(p.toString))).toMap res15: scala.collection.immutable.Map[Phrase.Value,Entity] = Map(My phrase 1 -> Entity@d0e999, My phrase 2 -> Entity@1987acd) |
有关更多信息,请参见"发散的隐式扩展" scalac消息的含义是什么? 和什么是发散的隐式扩展错误?
从错误中可以看出,保存枚举的ValueSet在某些时候变成了SortedSet。 它想在地图上产生SortedSet,但不能在您的Entity上进行排序。
这样的情况适用于案例类Entity:
1 2 3 |