scala - 在 Scala 中获取所有 enum-y case 对象值

标签 scala reflection enums macros

在 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 覆盖。

    引用:
  • Case objects vs Enumerations in Scala
  • 最佳答案

    我找到了 cure ,称为 Enumeratum,但我想无论如何我都会发布这个问题,以使人们更容易找到这件新的宏观珠宝。

    关于scala - 在 Scala 中获取所有 enum-y case 对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093240/

    相关文章:

    string - Scala:分割字符串

    go - 使用反射附加到 slice

    c# - 使用反射在结构和类之间复制等效属性

    regex - 如何查看 RegexOptions 枚举中可用的选项?

    scala - scala 中映射的按键聚合/归约函数

    scala - 为什么不应该在函数式编程中使用变量赋值

    scala - Scala 中的增量编译可靠吗?

    c# - 查找所有 Func 委托(delegate)

    swift - 从 Swift 通用函数返回文字值?

    将 argv[] 与允许元素列表进行比较