在 Scala 中,枚举是一个有争议的领域,很多人(包括我自己)宁愿使用 case object
s 比任何基于库的枚举。这很好,只是没有得到所有可能值的列表,这有时是需要的。我已经手动维护了这样的列表( allKeys
),但这既乏味又容易出错。
问题是:Scala 2.11 TypeTags或者使用反射来创建这样的列表?
两种方法之一可以工作:
sealed
的所有派生实例类(class)case object
s 在特定对象中声明 注:有samples这似乎保证了我正在寻找的东西。但这太过分了 - 必须有一个几乎单行的才能得到相同的结果?
下面是对此的测试。我该如何实现
allOf
功能?class ManifestToolsTest extends UnitTest {
behavior of "ManifestTools" {
sealed class MyEnum
object MyEnum {
case object A extends MyEnum
case object B extends MyEnum
case object C extends MyEnum
val x= 10 // should not be listed
def f(x: Int) = x // should not be listed
}
def allOf[T]: Seq[T] = {
...
}
it should "be able to list the 'case object' members of an object" in {
val tmp: Seq[MyEnum] = allOf[MyEnum]
tmp should contain theSameElementsAs( List(MyEnum.A, MyEnum.B, MyEnum.C) )
}
}
}
我试图从 Scala 文档中获取此信息,但是当涉及到反射时,事情真的很抽象。我相信上述需求(应该)由 Scala 2.11 覆盖。
引用:
最佳答案
我找到了 cure ,称为 Enumeratum,但我想无论如何我都会发布这个问题,以使人们更容易找到这件新的宏观珠宝。
关于scala - 在 Scala 中获取所有 enum-y case 对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093240/