2017-05-18 8 views
0

Wie kombiniert man zwei Enums in Scala?Kombinieren Sie zwei Enums

object FilterDimensions extends Enumeration { 
    type FilterDimensions = Value 
    val Instance, Usage, Cost = Value 

} 

object Filter2Dimensions extends Enumeration { 
    type Filter2Dimensions = Value 
    val Instance, Savings, Coverage = Value 

} 

Ausgang benötigt eine einzelne Aufzählung sein, die die unterschiedlichen Werte

Enum - Instance, Usage, Costs, Saving, Coverage 

Antwort

2

ich es für möglich, das ist nicht nur denken, enthält.

Auch wenn Sie eine Aufzählung A_1 haben, mit den Werten B und C; und eine andere Aufzählung A_2 mit den Werten C und D, die richtigen Namen sind A_1.B, A_1.C, A_2.C, A_2.D. Sie sind also völlig unzusammenhängende Typen, es gibt keine automatische Möglichkeit, das, was Sie für doppelt halten, zu verwerfen. Es sei denn, Sie stützen sich auf die String-Darstellung

Vielleicht denken Sie über das makroskopische Problem falsch (oder vielleicht müssen Sie das wirklich tun, weil jemand so definiert und Sie müssen es tun). Haben Sie eine gemeinsame Eigenschaft auf beiden Enumerations? Das würde Ihren Methoden erlauben, entweder Enumerations zu empfangen (nicht sicher, ob es funktioniert, weil Sie den Enumeration.Value ... wollen).

Andere Option wäre, einen 2in1-Typ zu haben. Entweder [FilterDimensions, Filter2Dimensions] könnte es tun, aber ich bin fast sicher, dass cats, scalaz oder shapeless haben eine anständige Art

ich ein paar Sachen über Aufzählungen auf Scala schrieb, vielleicht finden Sie es nützlich. Es umfasst einige Alternativen zu den nativen scala Aufzählungen, und vielleicht einige von ihnen haben Funktionen, die Sie brauchen:

  1. http://pedrorijo.com/blog/scala-enums/
  2. http://pedrorijo.com/blog/scala-enums-part2/