Frage

Ich kenne mich mit Fallklassen, Mustervergleich, Unapply und PartialFunction aus, aber ich bin verwirrt über das folgende Makro-Snippet.

val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }

Scaladoc von MemberScopehttp://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes$MemberScope

Die Collect-Methode akzeptiert PartialFunction[Universe.Symbol, B]Ich kann es nicht finden unapply Methode von MethodSymbol und es ist auch ein Merkmal, keine Fallklasse, also wird der Code vom Compiler transformiert

{ case m: MethodSymbol => m }
War es hilfreich?

Lösung

Weil MethodSymbol ist kein generischer Typ, die Übereinstimmung

case m: MethodSymbol => m

ist im Wesentlichen gleichbedeutend mit

case m if m.isInstanceOf[MethodSymbol] => m

Hier gibt es absolut keine Magie, und unapply Maschinen haben überhaupt nichts mit solchen Spielen zu tun.Dasselbe kann auch in Java problemlos durchgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top