Каков синтаксис для создания Map в Scala, в которой в качестве ключа используется enum?

Пожалуйста, смотрите код ниже. Эта строка помечена как неправильная 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()) ) 
}

Я пытаюсь инициализировать экземпляр карты с каждым значением перечисления в пустой точке (это то, что происходит в каждом цикле).

РЕДАКТИРОВАТЬ: пришлось редактировать, потому что я кое-что испортил, редактируя вставленный код, но теперь он должен быть действительным

4 ответа

Решение
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 /* 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 и перечисления в Scala.

Я получил это для работы со следующим. Синтаксис немного шаткий, я признаю.

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 - это конкретный дневник в списке.

Другие вопросы по тегам