У меня есть некоторый код Scala, примерно аналогичный этому:
object Foo {
val thingA = ...
val thingB = ...
val thingC = ...
val thingD = ...
val thingE = ...
val thingsOfAKind = List(thingA, thingC, thingE)
val thingsOfADifferentKind = List(thingB, thingD)
val allThings = thingsOfAKind ::: thingsOfADifferentKind
}
Есть ли какой-нибудь более приятный способ объявить кучу вещей и иметь возможность доступа к ним как индивидуально по имени, так и коллективно?
Проблема, с которой я столкнулся в приведенном выше коде, заключается в том, что в реальной версии есть почти 30 разных вещей, и нет никакого способа убедиться, что каждая новая вещь, которую я добавляю, также добавляется в соответствующий список (или что allThings не заканчивается с дубликатами, хотя это относительно легко исправить).
Различные вещи могут обрабатываться в совокупности практически всей кодовой базой, но есть несколько мест и несколько вещей, где индивидуальная идентификация имеет значение.
Я думал только об использовании Map, но потом компилятор теряет способность проверять, существуют ли отдельные искомые объекты (и мне приходится либо оборачивать код для обработки неудачного поиска вокруг каждой попытки, либо игнорировать проблему и эффективно рисковать исключениями нулевого указателя).
Я мог бы сделать вид, что каждая вещь принадлежит наблюдаемому свойству вещей, тогда я бы, по крайней мере, имел бы один список всех вещей и мог бы получить списки каждого из видов с фильтром, но основная проблема остается в том, что я в идеале хотелось бы иметь возможность объявить, что вещь существует, имеет имя (идентификатор) и является частью коллекции.
Что я действительно хочу, так это что-то вроде карты времени компиляции. Есть ли хороший способ добиться чего-то подобного в Scala?