请参阅以下代码。 Eclipse将此行标记为不正确:
var map = Map[MyEnum,Point]()
我正在尝试使用scala等效于Java:
private enum Letters{ A,B,C}
private Map<Letters,Integer> thing= new HashMap<Letters,Integer> ();
这是写入它的文件/上下文。
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()) )
}
我正在尝试初始化地图的一个实例,枚举的每个值都映射到一个空点(这就是每个循环中发生的事情)。
编辑:不得不编辑,因为我搞砸了编辑粘贴代码的一些事情,但它现在应该有效了
答案 0 :(得分:14)
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
一样引用它。
答案 1 :(得分:2)
您没有将MyEnums
放在地图中,而是MyEnum
的值:
var map = Map[MyEnum.Value, Point]()
答案 2 :(得分:2)
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)))
}
答案 3 :(得分:1)
我让它与以下工作。我承认,语法有点不稳定。
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)
所以这里的日记是日记列表,而日记是列表中的特定日记。