我有这个枚举:
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]
任何人都有修复?
感谢您的时间。
答案 0 :(得分:1)
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)
答案 1 :(得分:0)
使用toMap
PhsIndType.values.map(x => x -> x.id).toMap
结果地图的类型可以是Map[PhsIndType.Value,Int]
。您不需要Map[AnyVal, AnyVal]
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)