Scala Enum to Map [无法证明..]



我有这个枚举:

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)

相关内容

  • 没有找到相关文章

最新更新