2017-05-18 66 views
0

如何在scala中结合两个枚举?结合两个枚举

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

} 

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

} 

输出需要一个单枚举包含只有不同的值

Enum - Instance, Usage, Costs, Saving, Coverage 

回答

2

我不认为这是可能的。

即使您有Enumeration A_1,值为B和C;和另一个值为C和D的Enumeration A_2,正确的'名称是A_1.B,A_1.C,A_2.C,A_2.D。所以他们是完全不相关的类型,没有自动的方式来丢弃你认为是重复的东西。除非你自己的基础上的字符串表示

也许你正在考虑对宏观问题的错误(或者也许你真正需要做的,你因为有人定义这样的,你必须这样做)。你有没有在枚举上有共同的特质?这将使你的方法接受或枚举(如果不知道它的工作原理,因为你想要的Enumeration.Value ...)

其他的办法是有一个二合一型。无论[FilterDimensions,Filter2Dimensions]能做到这一点,但我几乎可以肯定catsscalaz,或shapeless有一个更体面型

我写的关于Scala的枚举一些东西,也许你觉得它有用。它讲述了一些替代原生阶枚举,也许有些人有你需要的功能:

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