scala - 如何循环枚举,为每个枚举项设置值?

标签 scala

当我这样做时,我能够循环枚举:

object Colors extends Enumeration {
  type Colors = Value
  val Red, Green, Blue, Yellow = Value
}

for(e <- Colors.values) { ... }

所以我很容易创建下拉列表等。

现在我的枚举存储位值,例如:

object BitMask1 extends Enumeration {
  val none = math.pow(2,0).toLong
  val Green = math.pow(2,2).toLong
  val Yellow = math.pow(2,3).toLong
  val Black = math.pow(2,4).toLong
  // etc
}

我怎样才能循环这些值?

最佳答案

不能,因为您没有调用 EnumerationValue 方法,因此不会创建任何枚举案例。

Scala Enumeration 已知已损坏,我可以建议使用 ADT 方法吗?

sealed trait BitMask { def repr: Long }
object BitMask {
  case object None extends BitMask { val repr = math.pow(2, 0).toLong }
  case object Green extends BitMask { val repr = math.pow(2, 2).toLong }
  case object Yellow extends BitMask { val repr = math.pow(2, 3).toLong }
  case object Black extends BitMask { val repr = math.pow(2, 4).toLong }
  // etc
}

然后你就可以use a macro to enumerate the values .

关于scala - 如何循环枚举,为每个枚举项设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418178/

相关文章:

斯卡拉 : fold vs foldLeft

scala - PlayFramework 与 Scala、WebJars、ReactJS 和 RequireJS 一起使用吗?

scala - 为什么 Scala 的类型推断器会因这组涉及参数化类型的隐式参数而失败?

scala - 折叠/展平猫 Seq/猫列表。 验证

java - apache zeppelin 附加存储库导入

scala - 如果数据库连接失败,如何防止 Hikari Pool 初始化失败

java - 将 R 集成到 Java Web 应用程序中

scala - 添加配套项目后无法直接调用使用类名来映射类型

java - Swing Scala 问题 - 面板 100% 扩展

scala - 用提取程序替换案例类继承,保留Scala中的详尽性检查