Wie funktioniert die Groß-/Kleinschreibung nach Typ in Scala?
-
26-12-2019 - |
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 }
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