在Scala中创建使用枚举作为键的映射的语法是什么?

在Scala中创建使用枚举作为键的映射的语法是什么?,scala,Scala,请参阅下面的代码。Eclipse将此行标记为不正确: var map = Map[MyEnum,Point]() 我正在尝试使用与Java相当的scala: private enum Letters{ A,B,C} private Map<Letters,Integer> thing= new HashMap<Letters,Integer> (); 我试图用映射到空点的枚举的每个值初始化映射的实例(这就是for-each循环中发生的事情) 编辑:不得不编辑,因为我在

请参阅下面的代码。Eclipse将此行标记为不正确:

var map = Map[MyEnum,Point]()
我正在尝试使用与Java相当的scala:

private enum Letters{ A,B,C}
private Map<Letters,Integer> thing= new HashMap<Letters,Integer> ();
我试图用映射到空点的枚举的每个值初始化映射的实例(这就是for-each循环中发生的事情)

编辑:不得不编辑,因为我在编辑粘贴的代码时把一些事情弄糟了,但现在应该是有效的了

var map = Map[MyEnum.Value, Point]()
或者我更喜欢

import MyEnum._
var map = Map[MyEnum,Point]()

编辑:为了稍微解释一下这意味着什么,在枚举中,
Value
是类型和方法的名称
type MyEnum=Value
基本上只是为
Value
类型声明一个别名,下一行
val UL,U..=Value
正在调用方法来生成枚举,每个枚举的类型都是
MyEnum.Value
。因此,在声明映射时,必须引用此类型,以便键存储枚举。您也可以使用
MyEnum.MyEnum
,但您首先声明类型别名的原因是,您可以将其导入范围并能够引用它,就像
MyEnum
您没有将
MyEnums
放在映射中,而是将
MyEnum
的值放在映射中一样:

var map = Map[MyEnum.Value, Point]()

我让它与以下内容一起工作。我承认语法有点不可靠

object MyEnum extends Enumeration {
    type MyEnum = Value
    val UL, U, UR, L, R, DL, D, DR = Value
}

object Main extends App {
    Map[MyEnum.MyEnum, String]()

}
虽然我想这有助于多元化

object Diaries extends Enumeration {
    type Diary = Value
    val Steven, Jessica, Bob = Value
}

import Diaries._

val currentDiary = Steven

val interestingDiaries = List[Diary](Steven, Jessica)
所以这里的日记是日记列表,日记是列表中的一个特定日记

object MyEnum extends Enumeration {
  type MyEnum = Value /* You were missing keyword "type" here */
  val UL,U,UR,L,R,DL,D,DR = Value
}

object MyEnumHolder {
  import MyEnum.MyEnum /* Import this, otherwise type MyEnum can't be found */

  var map = Map[MyEnum, String]()
  MyEnum.values.foreach(x => (map + (x -> x.toString)))
}

您可能还想看一看。

我想您是想写
键入MyEnum=Value
您是对的,我在编辑中修复了它;)谢谢旁白:
枚举
被打破了。不要使用它,除非你讨厌你自己和你的开发伙伴。顺便说一下:如果你想使用
enum
s作为Java映射中的键,你可能应该使用
EnumMap
。这就成功了!谢谢我不明白价值的含义。虽然我认为价值是我的问题,但我必须查一下。
object MyEnum extends Enumeration {
  type MyEnum = Value /* You were missing keyword "type" here */
  val UL,U,UR,L,R,DL,D,DR = Value
}

object MyEnumHolder {
  import MyEnum.MyEnum /* Import this, otherwise type MyEnum can't be found */

  var map = Map[MyEnum, String]()
  MyEnum.values.foreach(x => (map + (x -> x.toString)))
}