gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:33:29 25 4
gpt4 key购买 nike

在 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com