I know about case classes, pattern matching, unapply and PartialFunction, but I'm confused about bellow macros snippet.
val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }
Scaladoc of MemberScope http://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes$MemberScope
Collect method accepts PartialFunction[Universe.Symbol, B]
I can't find unapply
method of MethodSymbol
and it's also trait not a case class, so in witch code compiler transforms
{ case m: MethodSymbol => m }
Because
MethodSymbol
is not a generic type, the matchis essentially equivalent to
There is absolutely no magic here, and
unapply
machinery is not related to such matches at all. Same thing can easily be done even in Java.