Mit Scala 2.10 Reflexion, wie kann ich die Werte von Enumeration auflisten?

8

Eine folgende Aufzählung haben

%Vor%

Wie bekomme ich eine Liste seiner Vals?

    
Nikita Volkov 26.08.2012, 09:54
quelle

3 Antworten

16

Wenn Sie gründlich darüber sein wollen, müssen Sie überprüfen, ob Ihre Symbole Value als Supertyp haben:

%Vor%

Nun, selbst wenn Sie folgendes haben (was völlig legal ist):

%Vor%

Sie erhalten immer noch die richtige Antwort:

%Vor%

Ihr aktueller Ansatz würde value someNonValueThing hier einschließen.

    
Travis Brown 26.08.2012, 20:58
quelle
6

Der folgende Code ruft eine Liste von Symbol -Objekten ab, die die "Vals" darstellen:

%Vor%

Es sollte angemerkt werden, dass anstatt nach is-Klauseln zu filtern, es mit .collect testing für bestimmte Typen wie folgt implementiert werden kann:

%Vor%

Dieser Ansatz kann für andere Aufgaben in der Reflexions-API erforderlich sein.

Es sollte auch beachtet werden, dass die Verwendung von .view überhaupt nicht verpflichtend ist, sondern nur eine Reihe von filter -Anwendungen (so viel wie viele andere Funktionen wie map , flatMap und usw.) .) viel effektiver, indem die Eingabesammlung nur einmal und an dem Punkt durchlaufen wird, an dem sie tatsächlich in eine konkrete Sammlung gezwungen wird ( .toList in unserem Fall).

Aktualisieren

Wie von Travis Brown vorgeschlagen, ist es auch möglich, direkt auf das ResponseType -Objekt zu verweisen. Daher kann der typeOf[ResponseType.Value].asInstanceOf[TypeRef].pre -Teil durch typeOf[ResponseType.type]

ersetzt werden     
Nikita Volkov 26.08.2012 09:54
quelle
3

Sie können über die Werte einer Enumeration über die Menge, die von der zurückgegeben wird, iterieren Aufzählungswerte Methode:

%Vor%     
user1625681 26.08.2012 10:12
quelle