Я хочу создать несколько объектов Enumeration, все наследующие от одного родителя. Причина, по которой я хочу, чтобы они наследовались от одного родителя, заключается в том, что я хочу создать коллекцию перечислений из объектов и сгруппировать их под этим типом.Создание родительского типа для нескольких объектов перечисления
object Searchable{
trait SearchFlags{
self: Enumeration =>
type Value = self.Value
}
}
object SearchableByLocation{
object SearchFlags extends Enumeration{
val Flag1 = Value
}
}
object SearchableByAge{
object SearchFlags extends Enumeration{
val Flag1 = Value
}
}
object Test extends App{
//I cannot refer to members of a trait directly, so the
//underlying type of Set is invalid
val flags: Set[ Searchable.SearchFlags.Value ] = Set(SearchableByLocation.SearchFlags.Flag1, SearchableByAge.SearchFlags.Flag1)
}
Как я могу добиться этого?
Возможно, это не то, что вы хотите. Вызывая одну и ту же функцию Value для обеих перечислений, вы делаете все экземпляры обоих перечислений полностью совместимыми. Это позволит вам передать значение SearchableByAge методу, ожидающему значения SearchableByLocation. Оба типа имеют тип Searchable.SearchFlags # Value. Это громоздкий способ создать единый enum ;-) –
@ DanielL. Спасибо за ваш вклад, но я не уверен, что понял, что вы пытаетесь сказать. Метод значения в 'val Flag1 = Value' возвращает значение соответствующих типов' Value'. Проверьте это: http://sprunge.us/iTPM Также удален оставшийся комментарий из моего ответа. – 0fnt
Интересно! Мне любопытно, что вы получаете экземпляры одного и того же значения Searchable.SearchFlags # Value, которые в одно и то же время различного типа, но реализация Enumeration довольно запутанна, так справедлива, если она работает для вас ;-) –