当我这样做时,我能够循环我的枚举:
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
}
我怎么可能循环这些值?
答案 0 :(得分:4)
您不能,因为您没有调用Value
的{{1}}方法,因此没有创建枚举案例。
已知Scala Enumeration
已被破坏,我可以建议使用ADT方法吗?
Enumeration
答案 1 :(得分:0)
Enumeration
可以通过不同的方式满足您的需求。
这是一个:
scala> object Colors extends Enumeration { val None, Blue, Green, Yellow = Value }
defined object Colors
scala> import Colors._
import Colors._
scala> Blue.id
res0: Int = 1
scala> Yellow.id
res1: Int = 3
scala> object Colors extends Enumeration {
| val None, Blue, Green, Yellow = Value
| implicit class `color mask`(val v: Value) extends AnyVal {
| def mask = 1L << v.id
| }
| implicit class `colors mask`(val vs: ValueSet) extends AnyVal {
| def mask = vs.toBitMask(0)
| }
| }
defined object Colors
scala> import Colors._
import Colors._
scala> Blue.mask
res2: Long = 2
scala> Yellow.mask
res3: Long = 8
scala> (Blue + Yellow).mask
res4: Long = 10
scala> for (v <- Colors.values) yield v.mask
res5: scala.collection.immutable.SortedSet[Long] = TreeSet(1, 2, 4, 8)