在Scala中创建使用枚举作为键的映射的语法是什么?
请参阅下面的代码。Eclipse将此行标记为不正确:在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循环中发生的事情) 编辑:不得不编辑,因为我在
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)))
}