结合两个枚举

时间:2017-05-18 22:31:22

标签: scala enums

如何在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 

1 个答案:

答案 0 :(得分:2)

我认为这不可行。

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

也许你正在考虑错误的宏观问题(或者你真的需要这样做,因为有人这样定义,你必须这样做)。你有没有在两个枚举上有一个共同的特点?这将允许您的方法接收枚举(不确定它是否有效,因为您想要Enumeration.Value ...)

其他选择是拥有2in1类型。 [FilterDimensions,Filter2Dimensions]可以执行此操作,但我几乎可以确定catsscalazshapeless具有更合适的类型

我在Scala上写了一些关于枚举的东西,也许你觉得它很有用。它涵盖了原生scala Enumerations的一些替代方案,也许其中一些具有您需要的功能:

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