Question

Je connais les classes de cas, la correspondance de modèles, l'annulation d'application et PartialFunction, mais je suis confus au sujet de l'extrait de macros ci-dessous.

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

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

La méthode de collecte accepte PartialFunction[Universe.Symbol, B]je ne trouve pas unapply méthode de MethodSymbol et ce n'est pas non plus une classe de cas, donc dans le compilateur de code de sorcière, les transformations

{ case m: MethodSymbol => m }
Était-ce utile?

La solution

Parce que MethodSymbol n'est pas un type générique, la correspondance

case m: MethodSymbol => m

est essentiellement équivalent à

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

Il n'y a absolument aucune magie ici, et unapply les machines ne sont pas du tout liées à de tels matchs.La même chose peut facilement être faite même en Java.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top