9

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

var map = Map[MyEnum,Point]()

我正在尝试做 Java 的 scala 等价物:

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()) ) 
}

我正在尝试初始化映射的实例,其中枚举的每个值都映射到一个空点(这就是 for each 循环中发生的事情)。

编辑:必须编辑,因为我在编辑粘贴的代码时搞砸了一些事情,但现在应该有效

4

4 回答 4

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

或者我更喜欢

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

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

于 2012-07-11T20:17:49.067 回答
2

您没有放入MyEnums地图,而是以下MyEnum

var map = Map[MyEnum.Value, Point]()
于 2012-07-11T20:20:32.067 回答
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)))
}

您可能还想看看Case classes vs Enumerations in Scala

于 2012-07-11T20:24:10.217 回答
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)

所以这里的Diaries就是Diary的列表,Diary就是列表中的具体日记。

于 2012-07-11T20:22:46.120 回答