2

私の質問は、Scala を使用して Scala で定義されたオブジェクトの内部オブジェクトを反復する方法reflection packageですか?

object Units {

    val values = CITIZEN :: WORKER :: Nil // I need something reflectional to list all of the case objects

    case object CITIZEN extends Population
    case object WORKER extends Population
}
4

2 に答える 2

1

これが最善の方法かどうかはわかりませんが、次の方法があります。

object Units {

    val values = CITIZEN :: WORKER :: Nil

    trait Population

    case object CITIZEN extends Population

    case object WORKER extends Population

    val reflectionValues = {
        import scala.reflect.runtime.{universe => ru}
        val mirror = ru.runtimeMirror(getClass.getClassLoader)
        val objects = ru.typeOf[Units.type].declarations.filter(_.isModule)
        objects.map(o => mirror.reflectModule(o.asModule).instance.asInstanceOf[Population]).toList
    }

    def main(args: Array[String]) {
        assert(values == reflectionValues)
    }
}
于 2013-08-04T14:25:05.373 に答える