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