我有这个枚举:
object PhsIndType extends Enumeration{
type PhsIndType = Value
val A : Value = Value(1)
val R : Value= Value(2)
val O : Value = Value(3)
val E : Value = Value(4)
}
我正在尝试将其加载到地图中以便于使用:
val map = PhsIndType.values.toMap[AnyVal, AnyVal]
我尝试使用我能想到的每种类型而不是 AnyVal,但我总是收到错误:
Cannot prove that enumeration.PhsIndType.Value <:< (AnyVal, AnyVal).
val map = PhsIndType.values.toMap[AnyVal, AnyVal]
有人有解决方法吗?
谢谢你的时间。
toMap
的签名是:
toMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U]
这意味着基础集合需要具有类型 Tuple2
的元素。
PhsIndType.values
的类型是PhsIndType.ValueSet
的,而不是Tuple2
若要实现所需的结果,需要将基础集合转换为(T,U)
或Tuple2
类型,可以通过映射来实现:
scala> :paste
// Entering paste mode (ctrl-D to finish)
object PhsIndType extends Enumeration {
type PhsIndType = Value
val A : Value = Value(1)
val R : Value= Value(2)
val O : Value = Value(3)
val E : Value = Value(4)
}
PhsIndType.values.map(x => (x.id, x)).toMap
// Exiting paste mode, now interpreting.
defined object PhsIndType
res0: scala.collection.immutable.Map[Int,PhsIndType.Value] = Map(1 -> A, 2 -> R, 3 -> O, 4 -> E)
使用 toMap
PhsIndType.values.map(x => x -> x.id).toMap
生成的映射的类型可以Map[PhsIndType.Value,Int]
。你不需要有Map[AnyVal, AnyVal]
Scala REPL
scala> PhsIndType.values.map(x => x -> x.id).toMap
res14: scala.collection.immutable.Map[PhsIndType.Value,Int] = Map(A -> 1, R -> 2, O -> 3, E -> 4)