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

jhn*_*lvr 8 scala

请看下面的代码.Eclipse将此行标记为不正确:

var map = Map[MyEnum,Point]()
Run Code Online (Sandbox Code Playgroud)

我试图做scala相当于Java:

private enum Letters{ A,B,C}
private Map<Letters,Integer> thing= new HashMap<Letters,Integer> ();
Run Code Online (Sandbox Code Playgroud)

这是写入它的文件/上下文.

class Point(var x:Int = 0, var y:Int = 0, var hasBeenSet:Boolean = false){

}

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

object MyEnumHolder {
  var map = Map[MyEnum,Point]()
  MyEnum.values.foreach(x => (map + (x -> new Point()) ) 
}
Run Code Online (Sandbox Code Playgroud)

我试图初始化一个映射的实例,枚举的每个值映射到一个空点(这是每个循环中发生的事情).

编辑:不得不编辑,因为我搞砸了一些编辑粘贴的代码,但它现在应该是有效的

Dan*_*mon 14

var map = Map[MyEnum.Value, Point]()
Run Code Online (Sandbox Code Playgroud)

或者我更喜欢

import MyEnum._
var map = Map[MyEnum,Point]()
Run Code Online (Sandbox Code Playgroud)

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